diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76a222c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/database_linux diff --git a/a b/a new file mode 100644 index 0000000..4fbaf93 --- /dev/null +++ b/a @@ -0,0 +1 @@ +01 11 27 00 00 01 02 11 4e 46 bd 00 00 00 00 00 00 00 00 00 06 11 27 00 00 00 9c 5e 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 98 5c dd 69 76 94 80 80 ca 81 20 81 59 82 07 82 56 82 75 83 2a 83 6c 84 11 84 54 85 02 85 0f 85 4e 86 24 87 04 87 55 87 56 87 5a 87 7b 88 01 88 36 89 0a 89 39 8a 02 8a 30 8a 36 8a 52 8a 7d 8b 5b 8b 5c 8c 11 8c 62 8d 22 8d 23 8d 2e 8d 30 8d 52 8d 7e 8e 32 8e 7f 8f 52 90 29 90 55 91 07 91 55 92 16 92 36 93 04 93 07 93 52 94 19 94 3b 94 73 95 2b 95 31 95 74 96 36 96 7c 97 18 97 54 98 28 98 77 99 35 9a 12 9a 4b 9b 04 9b 62 9c 40 9c 4a 9c 61 9d 24 9d 39 9d 78 9e 5c 9f 16 9f 6e a0 13 a0 20 a0 61 a0 7e a1 48 a2 09 a2 1e a2 6f a2 71 a3 55 a3 57 a4 0e a4 2a a4 7c a5 3c a5 74 a6 03 a6 50 a6 61 a6 76 a7 32 a7 54 a7 65 a8 25 a8 60 a9 18 a9 4b a9 77 aa 44 aa 56 ab 27 ab 61 ab 6f ac 35 ac 68 ad 06 ad 26 ad 2a ad 68 ae 35 af 05 af 4b b0 21 b0 53 b0 73 b1 0a b1 44 b1 55 b1 78 b2 4d b3 1f ff b3 76 b4 30 b4 51 b5 31 b5 70 b6 07 b6 52 b7 2e b8 0e b8 34 b9 03 b9 11 b9 26 b9 4d ba 1a ba 7d bb 16 bb 4c bb 79 bc 5a bc 72 bc 79 bd 01 bd 29 be 01 be 13 be 5e bf 34 c0 10 c0 4a c0 50 c1 1a c1 3f c1 64 c1 65 c1 7a c1 7d c2 27 c2 30 c2 73 c3 57 c3 7e c4 41 c4 42 c4 52 c5 00 c5 57 c6 1b c6 49 c6 5f c7 2d c7 73 c8 0b c8 42 c8 6a c9 33 ca 0e ca 20 ca 52 ca 63 cb 32 cb 72 cc 23 cc 3f cc 5a cc 60 cd 41 cd 5e ce 32 ce 4c cf 1d cf 67 d0 11 d0 6f d0 79 d1 2c d1 6a d2 1d d2 2f d2 5e d3 0a d3 12 d3 60 d4 09 d4 52 d4 77 d5 4b d5 62 d5 64 d5 7b d6 1e d6 3d d7 18 d7 67 d8 0f d8 4d d8 73 d9 03 d9 40 da 16 da 45 db 09 db 55 dc 15 dc 2f dc 41 dc 43 dc 6a dc 6d dd 33 dd 42 de 07 de 08 de 35 de 6a df 1f df 20 e0 02 e0 63 e1 29 e1 69 e2 01 e2 32 e2 7e e3 47 e4 19 e4 21 e4 28 ff e4 57 e5 35 e5 6a e6 2d e6 31 e6 67 e7 09 e7 65 e7 6c e8 41 e8 5f e8 71 e9 42 e9 51 ea 32 ea 4f eb 29 eb 33 eb 66 eb 7e ec 4c ec 7f ed 32 ed 3c ed 7f ee 01 ee 1f ee 20 ee 72 ef 39 f0 06 f0 44 f0 75 f1 40 f1 75 f2 2f f2 42 f2 5f f3 37 f3 7b f4 2d f4 3e f4 53 f5 05 f5 11 f5 4f f6 09 f6 43 f6 73 f7 02 f7 5c f8 30 f8 68 f8 79 f9 0e f9 5c f9 5e f9 78 fa 0f fa 4c fb 25 fb 62 fc 3e fd 07 fd 29 fd 7a fe 25 fe 74 ff 1a ff 38 ff 41 ff 7d 81 00 5d 81 00 60 81 01 32 81 01 3a 81 01 50 81 02 08 81 02 38 81 02 5f 81 03 01 81 03 19 81 03 48 81 04 07 81 04 4b 81 04 5e 81 05 05 81 05 21 81 05 28 81 05 47 81 05 5d 81 05 7d 81 06 0c 81 06 5c 81 07 0a 81 07 67 81 07 7b 81 08 2e 81 08 6c 81 08 76 81 09 0a 81 09 4a 81 09 50 81 09 64 81 0a 16 81 0a 56 81 0b 11 81 0b 28 81 0b 52 81 0b 7f 81 0c 0a 81 0c 5d 81 0d 3f 81 0e 0c 81 0e 33 81 0e 69 81 0f 06 81 0f 39 81 0f 3f 81 0f 40 81 0f 41 81 0f 74 81 10 51 81 10 67 81 11 1d 81 12 01 81 12 1a 81 12 3c ff 81 12 4f 81 12 7e 81 13 4c 81 13 56 81 13 6c 81 14 4e 81 14 65 81 15 41 81 15 49 81 16 07 81 16 18 81 16 76 81 17 56 81 18 00 81 18 12 81 18 6e 81 19 4b 81 1a 29 81 1a 33 81 1b 0e 81 1b 46 81 1b 6f 81 1b 78 81 1c 04 81 1c 37 81 1c 40 81 1c 7c 81 1d 12 81 1d 2e 81 1d 56 81 1d 59 81 1e 23 81 1e 46 81 1e 4e 81 1e 7b 81 1f 3d 81 1f 75 81 20 19 81 20 4a 81 20 58 81 21 07 81 21 4a 81 21 64 81 21 77 81 22 1b 81 22 2a 81 22 76 81 23 1f 81 23 40 81 23 66 81 24 0b 81 24 1d 81 24 75 81 25 51 81 25 76 81 26 33 81 26 62 81 27 29 81 27 61 81 28 3b 81 29 15 81 29 45 81 29 6c 81 2a 35 81 2a 7d 81 2b 50 81 2c 07 81 2c 68 81 2c 74 81 2d 4e 81 2e 2e 81 2e 7f 81 2f 07 81 2f 34 81 2f 7b 81 30 0c 81 30 5b 81 31 3e 81 31 60 81 32 2f 81 32 7b 81 33 30 81 34 0a 81 34 11 81 34 6a 81 35 18 81 35 5c 81 35 79 81 36 5a 81 37 0d 81 37 20 81 37 27 81 37 5b 81 38 3b 81 38 73 81 39 16 81 39 65 81 3a 48 81 3a 67 81 3b 24 81 3b 43 81 3c 26 81 3c 6a 81 3d 25 81 3d 4d 81 3d 55 81 3d 5d 81 3e 12 81 3e 24 81 3e 49 81 3f 0a 81 3f 17 81 3f 28 81 40 09 81 40 30 81 41 02 81 41 2a 81 41 52 81 41 64 81 41 75 81 42 33 81 42 59 81 43 1b 81 43 59 81 43 60 81 43 7f 81 44 26 81 44 29 ff 81 44 3b 81 44 68 81 45 16 81 45 5c 81 46 03 81 46 5b 81 46 7f 81 47 06 81 47 25 81 47 79 81 48 41 81 49 1a 81 49 1f 81 49 32 81 49 58 81 4a 35 81 4a 39 81 4a 5b 81 4a 72 81 4b 4e 81 4c 1b 81 4c 48 81 4c 53 81 4c 67 81 4d 00 81 4d 07 81 4d 57 81 4e 39 81 4e 64 81 4e 69 81 4f 04 81 4f 64 81 50 46 81 50 59 81 51 10 81 51 73 81 52 15 81 52 28 81 52 64 81 53 32 81 54 01 81 54 35 81 54 3c 81 54 4d 81 55 07 81 55 64 81 55 7e 81 56 39 81 56 54 81 56 73 81 57 42 81 57 58 81 58 2b 81 58 34 81 59 0f 81 59 5f 81 59 78 81 5a 02 81 5a 48 81 5a 7a 81 5b 44 81 5b 5e 81 5c 0f 81 5c 26 81 5c 6c 81 5d 1c 81 5d 3c 81 5d 5d 81 5e 30 81 5e 3f 81 5e 72 81 5f 06 81 5f 3a 81 5f 7a 81 5f 7f 81 60 0c 81 60 18 81 60 72 81 61 11 81 61 25 81 61 79 81 62 1c 81 62 69 81 63 4d 81 64 20 81 64 2e 81 64 30 81 64 4d 81 64 61 81 65 35 81 66 16 81 66 3e 81 67 11 81 67 20 81 67 7e 81 68 21 81 68 64 81 68 7c 81 69 1c 81 69 1e 81 69 76 81 6a 32 81 6a 76 81 6b 41 81 6b 5a 81 6c 30 81 6c 6d 81 6d 2e 81 6d 79 81 6e 0b 81 6e 29 81 6e 49 81 6e 7a 81 6f 06 81 6f 2a 81 6f 3b 81 6f 77 81 70 40 81 71 15 81 71 17 81 71 5b 81 71 69 81 71 7c 81 72 29 81 73 02 81 73 5e 81 74 36 81 75 08 ff 81 75 2b 81 75 5d 81 76 3c 81 77 02 81 77 64 81 78 20 81 78 51 81 78 79 81 79 2d 81 79 59 81 7a 20 81 7a 5b 81 7b 15 81 7b 22 81 7b 4a 81 7c 0a 81 7c 3b 81 7c 42 81 7d 06 81 7d 0b 81 7d 35 81 7d 7f 81 7e 61 81 7e 72 81 7f 36 81 7f 39 81 7f 71 82 00 1e 82 00 45 82 01 28 82 01 49 82 01 53 82 02 35 82 02 77 82 03 05 82 03 43 82 04 1b 82 04 6b 82 05 4d 82 06 29 82 06 34 82 06 3e 82 07 1d 82 07 29 82 07 3c 82 07 42 82 07 54 82 07 6f 82 08 28 82 08 5c 82 09 22 82 09 52 82 09 7b 82 0a 2a 82 0a 65 82 0a 6c 82 0b 19 82 0b 61 82 0c 0a 82 0c 3d 82 0d 21 82 0d 30 82 0d 71 82 0e 1f 82 0e 48 82 0f 07 82 0f 0f 82 0f 30 82 0f 4b 82 0f 6d 82 10 2e 82 10 67 82 11 10 82 11 40 82 11 7e 82 12 5c 82 13 3e 82 14 11 82 14 5b 82 15 35 82 16 10 82 16 30 82 17 11 82 17 53 82 17 69 82 18 1d 82 18 5b 82 18 5d 82 19 39 82 19 53 82 19 7e 82 1a 1c 82 1a 2c 82 1a 35 82 1a 74 82 1b 34 82 1b 6d 82 1b 75 82 1c 1e 82 1c 51 82 1d 1c 82 1d 65 82 1e 2f 82 1e 41 82 1f 0b 82 1f 5d 82 20 22 82 21 05 82 21 15 82 21 5f 82 21 73 82 22 1e 82 22 62 82 22 6b 82 23 2f 82 24 09 82 24 6c 82 25 32 82 25 7a 82 26 51 82 26 67 82 26 6d 82 27 23 82 27 4b 82 28 18 82 28 64 82 28 6c 82 29 3a ff 82 2a 14 82 2a 3a 82 2b 12 82 2b 72 82 2c 22 82 2c 65 82 2d 06 82 2d 1f 82 2d 4f 82 2e 13 82 2e 1b 82 2e 79 82 2f 4d 82 2f 67 82 30 44 82 30 70 82 31 47 82 32 13 82 32 5e 82 32 7c 82 33 57 82 34 02 82 34 1a 82 34 2b 82 34 37 82 34 6c 82 35 1f 82 35 4a 82 36 0b 82 36 17 82 36 49 82 37 1f 82 38 03 82 38 24 82 38 3f 82 39 01 82 39 12 82 39 20 82 39 24 82 39 59 82 3a 03 82 3a 19 82 3a 74 82 3b 2a 82 3b 37 82 3b 7e 82 3c 34 82 3c 4b 82 3c 69 82 3d 45 82 3e 20 82 3e 49 82 3f 0e 82 3f 1e 82 3f 20 82 3f 7c 82 40 34 82 40 75 82 41 39 82 42 0f 82 42 4a 82 43 0d 82 43 11 82 43 5f 82 43 69 82 44 2a 82 44 61 82 44 7a 82 45 34 82 46 10 82 46 11 82 46 2f 82 46 3d 82 46 61 82 47 07 82 47 0f 82 47 6b 82 48 20 82 48 42 82 48 65 82 48 68 82 49 1c 82 49 45 82 49 56 82 49 74 82 4a 1c 82 4a 65 82 4b 1f 82 4b 28 82 4b 7a 82 4b 7c 82 4c 10 82 4c 17 82 4c 35 82 4d 08 82 4d 69 82 4e 01 82 4e 18 82 4e 22 82 4e 4a 82 4e 72 82 4f 25 82 50 08 82 50 2b 82 50 2e 82 50 3c 82 50 6f 82 50 7e 82 51 2d 82 51 4e 82 52 20 82 52 62 82 53 11 82 53 45 82 54 23 82 54 78 82 55 1a 82 55 1d 82 55 33 82 55 67 82 56 27 82 56 7a 82 57 2f 82 58 12 82 58 55 82 58 68 82 59 10 82 59 6d ff 82 5a 09 82 5a 27 82 5a 2a 82 5b 04 82 5b 51 82 5c 1d 82 5c 42 82 5c 56 82 5d 15 82 5d 52 82 5d 53 82 5d 7b 82 5e 26 82 5e 2d 82 5e 7f 82 5f 46 82 5f 50 82 5f 6e 82 60 3c 82 61 0f 82 61 10 82 61 3b 82 61 4b 82 62 16 82 62 18 82 62 37 82 62 69 82 62 71 82 62 7f 82 63 0e 82 63 50 82 64 0b 82 64 49 82 65 15 82 65 3a 82 65 5a 82 65 71 82 66 3b 82 66 5a 82 66 72 82 67 0b 82 67 6c 82 67 7f 82 68 15 82 68 4d 82 69 1b 82 69 39 82 69 7b 82 6a 52 82 6a 72 82 6b 13 82 6b 3a 82 6b 5b 82 6c 29 82 6c 5d b6 82 6d 0e 00 82 6d 4e 82 6e 19 82 6e 6b 82 6f 42 82 6f 6d 82 70 21 82 70 6d 82 71 36 82 71 79 82 72 23 82 72 73 82 73 20 82 73 7a 82 74 06 82 74 43 82 75 26 82 75 46 82 76 1e 82 76 4f 82 77 26 82 77 4a 82 78 0c 82 78 61 82 79 0f 82 79 4a 82 7a 0c 82 7a 13 82 7a 44 82 7a 48 82 7a 7d 82 7b 16 82 7b 62 82 7b 6e 82 7c 49 82 7c 78 82 7d 50 82 7e 21 82 7e 34 82 7e 54 82 7e 62 82 7e 64 82 7f 24 82 7f 7c 83 00 18 83 00 5e 83 01 27 83 01 51 ae diff --git a/b b/b new file mode 100644 index 0000000..4fbaf93 --- /dev/null +++ b/b @@ -0,0 +1 @@ +01 11 27 00 00 01 02 11 4e 46 bd 00 00 00 00 00 00 00 00 00 06 11 27 00 00 00 9c 5e 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 7f 87 04 98 5c dd 69 76 94 80 80 ca 81 20 81 59 82 07 82 56 82 75 83 2a 83 6c 84 11 84 54 85 02 85 0f 85 4e 86 24 87 04 87 55 87 56 87 5a 87 7b 88 01 88 36 89 0a 89 39 8a 02 8a 30 8a 36 8a 52 8a 7d 8b 5b 8b 5c 8c 11 8c 62 8d 22 8d 23 8d 2e 8d 30 8d 52 8d 7e 8e 32 8e 7f 8f 52 90 29 90 55 91 07 91 55 92 16 92 36 93 04 93 07 93 52 94 19 94 3b 94 73 95 2b 95 31 95 74 96 36 96 7c 97 18 97 54 98 28 98 77 99 35 9a 12 9a 4b 9b 04 9b 62 9c 40 9c 4a 9c 61 9d 24 9d 39 9d 78 9e 5c 9f 16 9f 6e a0 13 a0 20 a0 61 a0 7e a1 48 a2 09 a2 1e a2 6f a2 71 a3 55 a3 57 a4 0e a4 2a a4 7c a5 3c a5 74 a6 03 a6 50 a6 61 a6 76 a7 32 a7 54 a7 65 a8 25 a8 60 a9 18 a9 4b a9 77 aa 44 aa 56 ab 27 ab 61 ab 6f ac 35 ac 68 ad 06 ad 26 ad 2a ad 68 ae 35 af 05 af 4b b0 21 b0 53 b0 73 b1 0a b1 44 b1 55 b1 78 b2 4d b3 1f ff b3 76 b4 30 b4 51 b5 31 b5 70 b6 07 b6 52 b7 2e b8 0e b8 34 b9 03 b9 11 b9 26 b9 4d ba 1a ba 7d bb 16 bb 4c bb 79 bc 5a bc 72 bc 79 bd 01 bd 29 be 01 be 13 be 5e bf 34 c0 10 c0 4a c0 50 c1 1a c1 3f c1 64 c1 65 c1 7a c1 7d c2 27 c2 30 c2 73 c3 57 c3 7e c4 41 c4 42 c4 52 c5 00 c5 57 c6 1b c6 49 c6 5f c7 2d c7 73 c8 0b c8 42 c8 6a c9 33 ca 0e ca 20 ca 52 ca 63 cb 32 cb 72 cc 23 cc 3f cc 5a cc 60 cd 41 cd 5e ce 32 ce 4c cf 1d cf 67 d0 11 d0 6f d0 79 d1 2c d1 6a d2 1d d2 2f d2 5e d3 0a d3 12 d3 60 d4 09 d4 52 d4 77 d5 4b d5 62 d5 64 d5 7b d6 1e d6 3d d7 18 d7 67 d8 0f d8 4d d8 73 d9 03 d9 40 da 16 da 45 db 09 db 55 dc 15 dc 2f dc 41 dc 43 dc 6a dc 6d dd 33 dd 42 de 07 de 08 de 35 de 6a df 1f df 20 e0 02 e0 63 e1 29 e1 69 e2 01 e2 32 e2 7e e3 47 e4 19 e4 21 e4 28 ff e4 57 e5 35 e5 6a e6 2d e6 31 e6 67 e7 09 e7 65 e7 6c e8 41 e8 5f e8 71 e9 42 e9 51 ea 32 ea 4f eb 29 eb 33 eb 66 eb 7e ec 4c ec 7f ed 32 ed 3c ed 7f ee 01 ee 1f ee 20 ee 72 ef 39 f0 06 f0 44 f0 75 f1 40 f1 75 f2 2f f2 42 f2 5f f3 37 f3 7b f4 2d f4 3e f4 53 f5 05 f5 11 f5 4f f6 09 f6 43 f6 73 f7 02 f7 5c f8 30 f8 68 f8 79 f9 0e f9 5c f9 5e f9 78 fa 0f fa 4c fb 25 fb 62 fc 3e fd 07 fd 29 fd 7a fe 25 fe 74 ff 1a ff 38 ff 41 ff 7d 81 00 5d 81 00 60 81 01 32 81 01 3a 81 01 50 81 02 08 81 02 38 81 02 5f 81 03 01 81 03 19 81 03 48 81 04 07 81 04 4b 81 04 5e 81 05 05 81 05 21 81 05 28 81 05 47 81 05 5d 81 05 7d 81 06 0c 81 06 5c 81 07 0a 81 07 67 81 07 7b 81 08 2e 81 08 6c 81 08 76 81 09 0a 81 09 4a 81 09 50 81 09 64 81 0a 16 81 0a 56 81 0b 11 81 0b 28 81 0b 52 81 0b 7f 81 0c 0a 81 0c 5d 81 0d 3f 81 0e 0c 81 0e 33 81 0e 69 81 0f 06 81 0f 39 81 0f 3f 81 0f 40 81 0f 41 81 0f 74 81 10 51 81 10 67 81 11 1d 81 12 01 81 12 1a 81 12 3c ff 81 12 4f 81 12 7e 81 13 4c 81 13 56 81 13 6c 81 14 4e 81 14 65 81 15 41 81 15 49 81 16 07 81 16 18 81 16 76 81 17 56 81 18 00 81 18 12 81 18 6e 81 19 4b 81 1a 29 81 1a 33 81 1b 0e 81 1b 46 81 1b 6f 81 1b 78 81 1c 04 81 1c 37 81 1c 40 81 1c 7c 81 1d 12 81 1d 2e 81 1d 56 81 1d 59 81 1e 23 81 1e 46 81 1e 4e 81 1e 7b 81 1f 3d 81 1f 75 81 20 19 81 20 4a 81 20 58 81 21 07 81 21 4a 81 21 64 81 21 77 81 22 1b 81 22 2a 81 22 76 81 23 1f 81 23 40 81 23 66 81 24 0b 81 24 1d 81 24 75 81 25 51 81 25 76 81 26 33 81 26 62 81 27 29 81 27 61 81 28 3b 81 29 15 81 29 45 81 29 6c 81 2a 35 81 2a 7d 81 2b 50 81 2c 07 81 2c 68 81 2c 74 81 2d 4e 81 2e 2e 81 2e 7f 81 2f 07 81 2f 34 81 2f 7b 81 30 0c 81 30 5b 81 31 3e 81 31 60 81 32 2f 81 32 7b 81 33 30 81 34 0a 81 34 11 81 34 6a 81 35 18 81 35 5c 81 35 79 81 36 5a 81 37 0d 81 37 20 81 37 27 81 37 5b 81 38 3b 81 38 73 81 39 16 81 39 65 81 3a 48 81 3a 67 81 3b 24 81 3b 43 81 3c 26 81 3c 6a 81 3d 25 81 3d 4d 81 3d 55 81 3d 5d 81 3e 12 81 3e 24 81 3e 49 81 3f 0a 81 3f 17 81 3f 28 81 40 09 81 40 30 81 41 02 81 41 2a 81 41 52 81 41 64 81 41 75 81 42 33 81 42 59 81 43 1b 81 43 59 81 43 60 81 43 7f 81 44 26 81 44 29 ff 81 44 3b 81 44 68 81 45 16 81 45 5c 81 46 03 81 46 5b 81 46 7f 81 47 06 81 47 25 81 47 79 81 48 41 81 49 1a 81 49 1f 81 49 32 81 49 58 81 4a 35 81 4a 39 81 4a 5b 81 4a 72 81 4b 4e 81 4c 1b 81 4c 48 81 4c 53 81 4c 67 81 4d 00 81 4d 07 81 4d 57 81 4e 39 81 4e 64 81 4e 69 81 4f 04 81 4f 64 81 50 46 81 50 59 81 51 10 81 51 73 81 52 15 81 52 28 81 52 64 81 53 32 81 54 01 81 54 35 81 54 3c 81 54 4d 81 55 07 81 55 64 81 55 7e 81 56 39 81 56 54 81 56 73 81 57 42 81 57 58 81 58 2b 81 58 34 81 59 0f 81 59 5f 81 59 78 81 5a 02 81 5a 48 81 5a 7a 81 5b 44 81 5b 5e 81 5c 0f 81 5c 26 81 5c 6c 81 5d 1c 81 5d 3c 81 5d 5d 81 5e 30 81 5e 3f 81 5e 72 81 5f 06 81 5f 3a 81 5f 7a 81 5f 7f 81 60 0c 81 60 18 81 60 72 81 61 11 81 61 25 81 61 79 81 62 1c 81 62 69 81 63 4d 81 64 20 81 64 2e 81 64 30 81 64 4d 81 64 61 81 65 35 81 66 16 81 66 3e 81 67 11 81 67 20 81 67 7e 81 68 21 81 68 64 81 68 7c 81 69 1c 81 69 1e 81 69 76 81 6a 32 81 6a 76 81 6b 41 81 6b 5a 81 6c 30 81 6c 6d 81 6d 2e 81 6d 79 81 6e 0b 81 6e 29 81 6e 49 81 6e 7a 81 6f 06 81 6f 2a 81 6f 3b 81 6f 77 81 70 40 81 71 15 81 71 17 81 71 5b 81 71 69 81 71 7c 81 72 29 81 73 02 81 73 5e 81 74 36 81 75 08 ff 81 75 2b 81 75 5d 81 76 3c 81 77 02 81 77 64 81 78 20 81 78 51 81 78 79 81 79 2d 81 79 59 81 7a 20 81 7a 5b 81 7b 15 81 7b 22 81 7b 4a 81 7c 0a 81 7c 3b 81 7c 42 81 7d 06 81 7d 0b 81 7d 35 81 7d 7f 81 7e 61 81 7e 72 81 7f 36 81 7f 39 81 7f 71 82 00 1e 82 00 45 82 01 28 82 01 49 82 01 53 82 02 35 82 02 77 82 03 05 82 03 43 82 04 1b 82 04 6b 82 05 4d 82 06 29 82 06 34 82 06 3e 82 07 1d 82 07 29 82 07 3c 82 07 42 82 07 54 82 07 6f 82 08 28 82 08 5c 82 09 22 82 09 52 82 09 7b 82 0a 2a 82 0a 65 82 0a 6c 82 0b 19 82 0b 61 82 0c 0a 82 0c 3d 82 0d 21 82 0d 30 82 0d 71 82 0e 1f 82 0e 48 82 0f 07 82 0f 0f 82 0f 30 82 0f 4b 82 0f 6d 82 10 2e 82 10 67 82 11 10 82 11 40 82 11 7e 82 12 5c 82 13 3e 82 14 11 82 14 5b 82 15 35 82 16 10 82 16 30 82 17 11 82 17 53 82 17 69 82 18 1d 82 18 5b 82 18 5d 82 19 39 82 19 53 82 19 7e 82 1a 1c 82 1a 2c 82 1a 35 82 1a 74 82 1b 34 82 1b 6d 82 1b 75 82 1c 1e 82 1c 51 82 1d 1c 82 1d 65 82 1e 2f 82 1e 41 82 1f 0b 82 1f 5d 82 20 22 82 21 05 82 21 15 82 21 5f 82 21 73 82 22 1e 82 22 62 82 22 6b 82 23 2f 82 24 09 82 24 6c 82 25 32 82 25 7a 82 26 51 82 26 67 82 26 6d 82 27 23 82 27 4b 82 28 18 82 28 64 82 28 6c 82 29 3a ff 82 2a 14 82 2a 3a 82 2b 12 82 2b 72 82 2c 22 82 2c 65 82 2d 06 82 2d 1f 82 2d 4f 82 2e 13 82 2e 1b 82 2e 79 82 2f 4d 82 2f 67 82 30 44 82 30 70 82 31 47 82 32 13 82 32 5e 82 32 7c 82 33 57 82 34 02 82 34 1a 82 34 2b 82 34 37 82 34 6c 82 35 1f 82 35 4a 82 36 0b 82 36 17 82 36 49 82 37 1f 82 38 03 82 38 24 82 38 3f 82 39 01 82 39 12 82 39 20 82 39 24 82 39 59 82 3a 03 82 3a 19 82 3a 74 82 3b 2a 82 3b 37 82 3b 7e 82 3c 34 82 3c 4b 82 3c 69 82 3d 45 82 3e 20 82 3e 49 82 3f 0e 82 3f 1e 82 3f 20 82 3f 7c 82 40 34 82 40 75 82 41 39 82 42 0f 82 42 4a 82 43 0d 82 43 11 82 43 5f 82 43 69 82 44 2a 82 44 61 82 44 7a 82 45 34 82 46 10 82 46 11 82 46 2f 82 46 3d 82 46 61 82 47 07 82 47 0f 82 47 6b 82 48 20 82 48 42 82 48 65 82 48 68 82 49 1c 82 49 45 82 49 56 82 49 74 82 4a 1c 82 4a 65 82 4b 1f 82 4b 28 82 4b 7a 82 4b 7c 82 4c 10 82 4c 17 82 4c 35 82 4d 08 82 4d 69 82 4e 01 82 4e 18 82 4e 22 82 4e 4a 82 4e 72 82 4f 25 82 50 08 82 50 2b 82 50 2e 82 50 3c 82 50 6f 82 50 7e 82 51 2d 82 51 4e 82 52 20 82 52 62 82 53 11 82 53 45 82 54 23 82 54 78 82 55 1a 82 55 1d 82 55 33 82 55 67 82 56 27 82 56 7a 82 57 2f 82 58 12 82 58 55 82 58 68 82 59 10 82 59 6d ff 82 5a 09 82 5a 27 82 5a 2a 82 5b 04 82 5b 51 82 5c 1d 82 5c 42 82 5c 56 82 5d 15 82 5d 52 82 5d 53 82 5d 7b 82 5e 26 82 5e 2d 82 5e 7f 82 5f 46 82 5f 50 82 5f 6e 82 60 3c 82 61 0f 82 61 10 82 61 3b 82 61 4b 82 62 16 82 62 18 82 62 37 82 62 69 82 62 71 82 62 7f 82 63 0e 82 63 50 82 64 0b 82 64 49 82 65 15 82 65 3a 82 65 5a 82 65 71 82 66 3b 82 66 5a 82 66 72 82 67 0b 82 67 6c 82 67 7f 82 68 15 82 68 4d 82 69 1b 82 69 39 82 69 7b 82 6a 52 82 6a 72 82 6b 13 82 6b 3a 82 6b 5b 82 6c 29 82 6c 5d b6 82 6d 0e 00 82 6d 4e 82 6e 19 82 6e 6b 82 6f 42 82 6f 6d 82 70 21 82 70 6d 82 71 36 82 71 79 82 72 23 82 72 73 82 73 20 82 73 7a 82 74 06 82 74 43 82 75 26 82 75 46 82 76 1e 82 76 4f 82 77 26 82 77 4a 82 78 0c 82 78 61 82 79 0f 82 79 4a 82 7a 0c 82 7a 13 82 7a 44 82 7a 48 82 7a 7d 82 7b 16 82 7b 62 82 7b 6e 82 7c 49 82 7c 78 82 7d 50 82 7e 21 82 7e 34 82 7e 54 82 7e 62 82 7e 64 82 7f 24 82 7f 7c 83 00 18 83 00 5e 83 01 27 83 01 51 ae diff --git a/client/client.go b/client/client.go index 2e78d7f..e631d9a 100644 --- a/client/client.go +++ b/client/client.go @@ -209,6 +209,9 @@ func (s *Connection) AppendMeasures(req proto.AppendMeasuresReq) (result AppendM if err != nil { return } + case proto.RespError: + err = s.onMaybeError() + return default: err = fmt.Errorf("unknown reponse code %d", code) return diff --git a/database/database.go b/database/database.go index be3f084..c8c6e51 100644 --- a/database/database.go +++ b/database/database.go @@ -9,6 +9,7 @@ import ( "sync" "time" + "gordenko.dev/dima/qb" "gordenko.dev/dima/qb/inbox" "gordenko.dev/dima/qb/recovery" "gordenko.dev/dima/qb/storage" @@ -85,6 +86,25 @@ func New(opt Options) (_ *Database, err error) { storageInbox := inbox.New() s.workerInbox = inbox.New() + // create separately, because needed for page cache + dataFile, err := os.OpenFile( + qb.GetDataFilePath(opt.Dir, opt.DatabaseName), + os.O_CREATE|os.O_RDWR, + 0666, + ) + if err != nil { + return nil, err + } + + indexFile, err := os.OpenFile( + qb.GetIndexFilePath(opt.Dir, opt.DatabaseName), + os.O_CREATE|os.O_RDWR, + 0666, + ) + if err != nil { + return nil, err + } + s.storage, err = storage.NewWriter(storage.WriterOptions{ Inbox: storageInbox, WorkerInbox: s.workerInbox, @@ -93,6 +113,8 @@ func New(opt Options) (_ *Database, err error) { WAL: recoveryReport.WAL, IndexFreeList: recoveryReport.IndexFreeList, DataFreeList: recoveryReport.DataFreeList, + DataFile: dataFile, + IndexFile: indexFile, ExitCh: s.exitCh, WaitGroup: s.waitGroup, }) diff --git a/database_linux b/database_linux deleted file mode 100755 index d14f7d9..0000000 Binary files a/database_linux and /dev/null differ diff --git a/enc/time_delta.go b/enc/time_delta.go index 3a9a33f..ba442cf 100644 --- a/enc/time_delta.go +++ b/enc/time_delta.go @@ -162,7 +162,7 @@ func (s *TimeDeltaCompressor) Evaluate(tmp []byte, timestamp uint32) qb.TimeEval RewindOffset: rewindOffset, Offset: len(s.buf) - s.pos - rewindOffset, ChangeSize: i, - TotalSpace: s.pos - rewindOffset + i, + TotalSpace: len(s.buf) - s.pos - rewindOffset + i, } } @@ -279,6 +279,7 @@ func (s *TimeDeltaCompressor) WriteCommitedTo(w io.Writer) (err error) { } func (s *TimeDeltaCompressor) ReplaceBuffer(newbuf []byte) { + //fmt.Printf("time replace buffer: new size %d\n", len(newbuf)) s.buf = newbuf s.pos = len(s.buf) s.lastUnixtime = 0 diff --git a/enc/value_delta.go b/enc/value_delta.go index 6169b6b..ba968fd 100644 --- a/enc/value_delta.go +++ b/enc/value_delta.go @@ -1,7 +1,6 @@ package enc import ( - "fmt" "io" "log" "math" @@ -136,7 +135,7 @@ func (s *ValueDeltaCompressor) Evaluate(tmp []byte, value float64) qb.ValueEvalu RewindOffset: rewindOffset, Offset: s.pos - rewindOffset, ChangeSize: i, - TotalSpace: s.pos + i - rewindOffset, + TotalSpace: s.pos - rewindOffset + i, Delta: delta, } } @@ -147,7 +146,9 @@ func (s *ValueDeltaCompressor) Append(rewindOffset int, change []byte, value flo // fmt.Printf("rewind offset: %d\n", rewindOffset) // fmt.Printf("change: % x\n", change) // fmt.Printf("value: %v\n", value) - // fmt.Printf("delta: %d\n", delta) + // fmt.Printf("bufsize: %d\n", len(s.buf)) + // fmt.Printf("s.pos: %d\n", s.pos) + //fmt.Printf("delta: %d\n", delta) if s.pos > 0 { s.lastDelta = delta } else { @@ -242,6 +243,7 @@ func (s *ValueDeltaCompressor) WriteCommitedTo(w io.Writer) (err error) { } func (s *ValueDeltaCompressor) ReplaceBuffer(newbuf []byte) { + //fmt.Printf("value replace buffer: new size %d\n", len(newbuf)) s.buf = newbuf s.pos = 0 s.baseValue = 0 @@ -318,7 +320,7 @@ func (s *ValueDeltaDecompressor) RestoreFromEnd(buf []byte) { } func (s *ValueDeltaDecompressor) RestoreFromState(state qb.ValueDeltaCapturedState) { - fmt.Printf("%#v\n", state) + //fmt.Printf("%#v\n", state) s.buf = state.Payload s.pos = len(s.buf) // first free if len(s.buf) > 0 { diff --git a/examples/play/main.go b/examples/play/main.go index fb6f541..488e00e 100644 --- a/examples/play/main.go +++ b/examples/play/main.go @@ -324,7 +324,7 @@ func sendRequests(conn *client.Connection) { result, err := conn.AppendMeasures(proto.AppendMeasuresReq{ MetricID: cumulativeMetricID, - Measures: cumulativeMeasures[:1], + Measures: cumulativeMeasures[:1000], }) if err != nil { log.Fatalf("conn.AppendMeasures: %s\n", err) diff --git a/examples/play/play b/examples/play/play index dd5e877..a118ab2 100755 Binary files a/examples/play/play and b/examples/play/play differ diff --git a/go.mod b/go.mod index 6b4b8df..56c6338 100644 --- a/go.mod +++ b/go.mod @@ -5,5 +5,5 @@ go 1.24.2 require ( gopkg.in/ini.v1 v1.67.1 gordenko.dev/dima/bin v0.0.0-20260612161453-4ee9be3474fb - gordenko.dev/dima/pretty v0.0.0-20221225212746-0c27d8c0ac69 + gordenko.dev/dima/textutil v0.0.0-20221225052909-270513dcbbbf ) diff --git a/go.sum b/go.sum index 0d2d171..84899b1 100644 --- a/go.sum +++ b/go.sum @@ -20,5 +20,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gordenko.dev/dima/bin v0.0.0-20260612161453-4ee9be3474fb h1:XBYZbK5Z+yfpKmSR2wuPLyW14ReCRSNdOlL5MWro8ns= gordenko.dev/dima/bin v0.0.0-20260612161453-4ee9be3474fb/go.mod h1:up64wpJp9xI+HqACtMDBIfPNUH6BYY/b3inKpUfrqDQ= -gordenko.dev/dima/pretty v0.0.0-20221225212746-0c27d8c0ac69 h1:nyJ3mzTQ46yUeMZCdLyYcs7B5JCS54c67v84miyhq2E= -gordenko.dev/dima/pretty v0.0.0-20221225212746-0c27d8c0ac69/go.mod h1:AxgKDktpqBVyIOhIcP+nlCpK+EsJyjN5kPdqyd8euVU= +gordenko.dev/dima/textutil v0.0.0-20221225052909-270513dcbbbf h1:GCL/m736iGDy3LgOm6iuvkxlGhUEyjfP7zgwZRkTYOg= +gordenko.dev/dima/textutil v0.0.0-20221225052909-270513dcbbbf/go.mod h1:M3e8S3N1USCMYmL6Q5uDQJaxfzBlWHnTX7rxCJQ6iJs= diff --git a/storage/wal_reader.go b/storage/wal_reader.go index 571fd96..72d6998 100644 --- a/storage/wal_reader.go +++ b/storage/wal_reader.go @@ -53,6 +53,7 @@ func (s *WALReader) NextPacket() (_ []any, _ bool, err error) { } else { current, err = s.readPacket() if err != nil { + err = fmt.Errorf("readPacket: %s", err) return } if current == nil { @@ -61,6 +62,7 @@ func (s *WALReader) NextPacket() (_ []any, _ bool, err error) { } s.next, err = s.readPacket() if err != nil { + err = fmt.Errorf("readPacket: %s", err) return } return current, s.next == nil, nil @@ -85,9 +87,12 @@ func (s *WALReader) readPacket() (_ []any, err error) { } calculatedCRC := util.CalculateCRC32(body) if calculatedCRC != writtenCRC { + //fmt.Printf("bodySize: %d\n", bodySize) + //fmt.Printf("body: % x\n", body) return nil, fmt.Errorf("written CRC %d != calculated CRC %d", writtenCRC, calculatedCRC) } + //fmt.Println("SAME CRC") return s.parseRecords(body) } diff --git a/storage/write_preparer.go b/storage/write_preparer.go index ca31e75..16d2b1e 100644 --- a/storage/write_preparer.go +++ b/storage/write_preparer.go @@ -49,6 +49,7 @@ type PreparedData struct { // ) func (s *WritePreparer) Prepare(input []any) PreparedData { + s.w.Reset() s.w.Write([]byte{ 0, 0, 0, 0, 0, 0, 0, 0, 0, // size (max 9 byte) }) @@ -249,7 +250,7 @@ func (s *WritePreparer) Reset() { } func getIndexRecords(buf []byte, count int) (list []IndexRecord) { - fmt.Printf("ipage: % x\n", buf) + //fmt.Printf("ipage: % x\n", buf) i := 0 for range count { var rec IndexRecord @@ -268,5 +269,11 @@ func finalizePacket(w *bytes.Buffer, checksum uint32) []byte { // cut empty bytes at start start := 9 - bin.CountVarSize(bodySize) bin.PutVarSize(packet[start:], bodySize) + + fmt.Printf("checksum: %d\n", checksum) + fmt.Printf("bodySize: %d\n", bodySize) + //fmt.Printf("start: %d\n", start) + fmt.Printf("body: % x\n", packet[9:len(packet)-4]) + return packet[start:] } diff --git a/storage/writer.go b/storage/writer.go index b1abafe..3f3a90d 100644 --- a/storage/writer.go +++ b/storage/writer.go @@ -89,6 +89,8 @@ type WriterOptions struct { WAL string DataFreeList *freelist.FreeList IndexFreeList *freelist.FreeList + DataFile *os.File + IndexFile *os.File //Atree *atree.Atree ExitCh chan struct{} WaitGroup *sync.WaitGroup @@ -122,9 +124,12 @@ func NewWriter(opt WriterOptions) (*Writer, error) { if opt.IndexFreeList == nil { return nil, errors.New("IndexFreeList option is required") } - // if opt.Atree == nil { - // return nil, errors.New("Atree option is required") - // } + if opt.DataFile == nil { + return nil, errors.New("DataFile option is required") + } + if opt.IndexFile == nil { + return nil, errors.New("IndexFile option is required") + } if opt.ExitCh == nil { return nil, errors.New("ExitCh option is required") } @@ -162,6 +167,8 @@ func NewWriter(opt WriterOptions) (*Writer, error) { workerInbox: opt.WorkerInbox, dir: opt.Dir, databaseName: opt.DatabaseName, + dataFile: opt.DataFile, + indexFile: opt.IndexFile, dataFreeList: opt.DataFreeList, indexFreeList: opt.IndexFreeList, writePreparer: writePreparer, @@ -184,6 +191,7 @@ func NewWriter(opt WriterOptions) (*Writer, error) { return nil, err } } + return s, nil } @@ -220,28 +228,33 @@ func (s *Writer) packAndWrite() (err error) { prepared := s.writePreparer.Prepare(input) //fmt.Printf("prepared: %#v\n", prepared) + fmt.Println("prepared") // 3. Пишу на диск WAL (append) n, err := s.wal.Write(prepared.Packet) if err != nil { return } + //fmt.Printf("written to wal: % x\n", prepared.Packet) if n != len(prepared.Packet) { return fmt.Errorf("written %d != packet size %d", n, len(prepared.Packet)) } if err = s.wal.Sync(); err != nil { return } + fmt.Println("synced to wal") // 4. Пишу в atree сторінки err = WriteDataPages(s.dataFile, prepared.WriteToData) if err != nil { return } + fmt.Println("written to data") err = WriteIndexPages(s.indexFile, prepared.WriteToIndex) if err != nil { return } + fmt.Println("written to index") // 6. відправляю input - worker-у @@ -300,6 +313,7 @@ func (s *Writer) packAndWrite() (err error) { s.workerInbox.Push(Changes{ Commits: prepared.Commits, }) + fmt.Println("pushed commits") } return nil } @@ -345,6 +359,9 @@ type PageToWrite struct { func WriteDataPages(file *os.File, pages []PageToWrite) (err error) { for _, p := range pages { + fmt.Println("pageNo: %d\n", p.PageNo) + } + for _, p := range pages { if len(p.Content) != DataPageSize { return fmt.Errorf("wrong data page size: %d", len(p.Content)) } @@ -354,7 +371,7 @@ func WriteDataPages(file *os.File, pages []PageToWrite) (err error) { ) n, err = file.WriteAt(p.Content, int64(off)) if err != nil { - return + return fmt.Errorf("file.WriteAt: %s; off=%d", err, off) } if n != DataPageSize { return fmt.Errorf("write %d instead of %d", n, DataPageSize) diff --git a/testdir/test.wal_0 b/testdir/test.wal_0 index 974036d..dbdb305 100755 Binary files a/testdir/test.wal_0 and b/testdir/test.wal_0 differ diff --git a/transform/raw.go b/transform/raw.go index 9b149de..37cca81 100644 --- a/transform/raw.go +++ b/transform/raw.go @@ -1,7 +1,6 @@ package transform import ( - "fmt" "io" bin "gordenko.dev/dima/bin/little" @@ -102,7 +101,7 @@ type CumulativeMeasureWriter struct { } func NewCumulativeMeasureWriter(dst io.Writer, since uint32) *CumulativeMeasureWriter { - fmt.Println("NewCumulativeMeasureWriter") + //fmt.Println("NewCumulativeMeasureWriter") // 20 - это timestamp, value, total return &CumulativeMeasureWriter{ arr: make([]byte, 20), @@ -128,13 +127,13 @@ func (s *CumulativeMeasureWriter) feed(timestamp uint32, value float64, isBuffer s.responder.AppendRecord(s.arr) } } - fmt.Println("feed:", timestamp, value, isBuffer) + //fmt.Println("feed:", timestamp, value, isBuffer) s.endTimestamp = timestamp s.endValue = value } func (s *CumulativeMeasureWriter) pack(total float64) { - fmt.Println("PACK") + //fmt.Println("PACK") bin.PutUint32(s.arr[0:], s.endTimestamp) bin.PutFloat64(s.arr[4:], s.endValue) bin.PutFloat64(s.arr[12:], total) diff --git a/transform/responder.go b/transform/responder.go index 988e06c..f20700e 100644 --- a/transform/responder.go +++ b/transform/responder.go @@ -38,13 +38,13 @@ func NewChunkedResponder(dst io.Writer) *ChunkedResponder { func (s *ChunkedResponder) BufferRecord(rec []byte) { s.buf.Write(rec) s.recordsQty++ - fmt.Println("BufferRecord", s.recordsQty) + //fmt.Println("BufferRecord", s.recordsQty) } func (s *ChunkedResponder) AppendRecord(rec []byte) error { s.buf.Write(rec) s.recordsQty++ - fmt.Println("AppendRecord", s.recordsQty) + //fmt.Println("AppendRecord", s.recordsQty) if s.buf.Len() < 1500 { return nil @@ -63,7 +63,7 @@ func (s *ChunkedResponder) AppendRecord(rec []byte) error { } func (s *ChunkedResponder) Flush() error { - fmt.Println("Flush", s.recordsQty) + //fmt.Println("Flush", s.recordsQty) if s.recordsQty > 0 { if err := s.sendBuffered(); err != nil { return err @@ -78,14 +78,14 @@ func (s *ChunkedResponder) Flush() error { } func (s *ChunkedResponder) sendBuffered() (err error) { - fmt.Println("sendBuffered", s.recordsQty) + //fmt.Println("sendBuffered", s.recordsQty) msg := s.buf.Bytes() bin.PutUint32(msg[1:], uint32(s.recordsQty)) - fmt.Printf("put uint16: %d\n", msg[:3]) + //fmt.Printf("put uint16: %d\n", msg[:3]) - fmt.Printf("send %d records\n", s.recordsQty) + //fmt.Printf("send %d records\n", s.recordsQty) - fmt.Printf("send buffered: %d, qty: %d\n", msg, s.recordsQty) + //fmt.Printf("send buffered: %d, qty: %d\n", msg, s.recordsQty) n, err := s.dst.Write(msg) if err != nil { diff --git a/util/io_test.go b/util/io_test.go index a58c073..81c6efc 100644 --- a/util/io_test.go +++ b/util/io_test.go @@ -1,8 +1,14 @@ package util import ( + "bytes" + "fmt" "hash/crc32" + "io" + "os" "testing" + + "gordenko.dev/dima/textutil" ) var page = make([]byte, 4096) @@ -19,3 +25,38 @@ func BenchmarkCRC32IEEE(b *testing.B) { crc32.Checksum(page, ieeeTable) } } + +func TestHash(t *testing.T) { + raw, err := os.ReadFile("../b") + if err != nil { + t.Fatal(err) + } + + buf, err := textutil.ParseHex(string(raw)) + if err != nil { + t.Fatal(err) + } + + fmt.Println(CalculateCRC32(buf)) + + w := bytes.NewBuffer(nil) + w.Write([]byte{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, // size (max 9 byte) + }) + + hasher := NewHasher() + + multi := io.MultiWriter(w, hasher) + + i := 0 + for i < len(buf) { + end := i + 50 + if end >= len(buf) { + end = len(buf) + } + multi.Write(buf[i:end]) + i += 50 + } + + fmt.Println(hasher.Sum32()) +} diff --git a/worker/metric.go b/worker/metric.go index 7203f26..51c71de 100644 --- a/worker/metric.go +++ b/worker/metric.go @@ -77,6 +77,7 @@ func (s *Metric) OnMeasuresDeleteCommited(rec storage.MeasuresDeleteCommited) { } func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox *inbox.Inbox) { + if s.capturedState != nil { s.WaitQueue = append(s.WaitQueue, req) } @@ -118,9 +119,9 @@ func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox } tReport := timestamps.Evaluate(tmp[:7], measure.Timestamp) - fmt.Printf("tReport: %#v\n", tReport) + //fmt.Printf("tReport: %#v\n", tReport) vReport := values.Evaluate(tmp[7:], measure.Value) - fmt.Printf("vReport: %#v\n", vReport) + //fmt.Printf("vReport: %#v\n", vReport) totalRequiredSpace := tReport.TotalSpace + vReport.TotalSpace @@ -136,6 +137,7 @@ func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox valuesRewindOffset = vReport.RewindOffset } } else { + fmt.Println("PAGE FILLED") // сторінка заповнена since := s.timestamps.ReplaceSinceWithUntil() @@ -161,6 +163,11 @@ func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox // renew s.buffer = buf + tReport = timestamps.Evaluate(tmp[:7], measure.Timestamp) + //fmt.Printf("tReport: %#v\n", tReport) + vReport = values.Evaluate(tmp[7:], measure.Value) + //fmt.Printf("vReport: %#v\n", vReport) + timestamps.Append(tReport.RewindOffset, tmp[:tReport.ChangeSize], measure.Timestamp) values.Append(vReport.RewindOffset, tmp[7:7+vReport.ChangeSize], measure.Value, vReport.Delta) } @@ -181,6 +188,7 @@ func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox // скопіювати. Причому можна скопіювати зрізи chunks if len(pages) > 0 { + fmt.Println("push pages") // пишу в storage довгим шляхом через redo файл і запис в data файл storageInbox.Push(storage.MeasuresAppendWithGrow{ MetricID: req.MetricID, @@ -198,6 +206,7 @@ func (s *Metric) AppendMeasures(req AppendMeasuresReq, tmp []byte, storageInbox ResultCh: req.ResultCh, }) } else { + fmt.Println("push simple") // короткий шлях - запис лише в storage storageInbox.Push(storage.MeasuresAppend{ MetricID: req.MetricID, @@ -329,27 +338,27 @@ func (s *Metric) StartFullScan(req FullScanReq) { if done { break } - fmt.Println("ts:", timestamp) + //fmt.Println("ts:", timestamp) value, done := valueDecompressor.NextValue() if done { qb.Abort(qb.HasTimestampNoValueBug, ErrNoValueBug) } - fmt.Println("value:", value) + //fmt.Println("value:", value) req.ResponseWriter.FeedNoSend(timestamp, value) } - if s.lastPageNo > 0 { - req.ResultCh <- FullScanResult{ - ResultCode: UntilFound, - LastPageNo: s.lastPageNo, - FracDigits: s.fracDigits, - } - s.rLocks++ - } else { - req.ResultCh <- FullScanResult{ - ResultCode: QueryDone, - } + // if s.lastPageNo > 0 { + // req.ResultCh <- FullScanResult{ + // ResultCode: UntilFound, + // LastPageNo: s.lastPageNo, + // FracDigits: s.fracDigits, + // } + // s.rLocks++ + // } else { + req.ResultCh <- FullScanResult{ + ResultCode: QueryDone, } + //} } // індекси