Example #1
0
 def generate_leader_raw_data(self):
     dbm = data_block_manager.DataBlockManager(self.data_source_l, 0)
     raw_data_dir = os.path.join(self.data_source_l.raw_data_dir,
                                 common.partition_repr(0))
     if gfile.Exists(raw_data_dir):
         gfile.DeleteRecursively(raw_data_dir)
     gfile.MakeDirs(raw_data_dir)
     rdm = raw_data_visitor.RawDataManager(self.etcd, self.data_source_l, 0)
     block_index = 0
     builder = data_block_manager.DataBlockBuilder(
         self.data_source_l.raw_data_dir,
         self.data_source_l.data_source_meta.name, 0, block_index, None)
     process_index = 0
     start_index = 0
     for i in range(0, self.leader_end_index + 3):
         if (i > 0 and i % 2048 == 0) or (i == self.leader_end_index + 2):
             meta = builder.finish_data_block()
             if meta is not None:
                 ofname = common.encode_data_block_fname(
                     self.data_source_l.data_source_meta.name, meta)
                 fpath = os.path.join(raw_data_dir, ofname)
                 self.manifest_manager.add_raw_data(0, [
                     dj_pb.RawDataMeta(
                         file_path=fpath,
                         timestamp=timestamp_pb2.Timestamp(seconds=3))
                 ], False)
                 process_index += 1
                 start_index += len(meta.example_ids)
             block_index += 1
             builder = data_block_manager.DataBlockBuilder(
                 self.data_source_l.raw_data_dir,
                 self.data_source_l.data_source_meta.name, 0, block_index,
                 None)
         feat = {}
         pt = i + 1 << 30
         if i % 3 == 0:
             pt = i // 3
         example_id = '{}'.format(pt).encode()
         feat['example_id'] = tf.train.Feature(
             bytes_list=tf.train.BytesList(value=[example_id]))
         event_time = 150000000 + pt
         feat['event_time'] = tf.train.Feature(
             int64_list=tf.train.Int64List(value=[event_time]))
         example = tf.train.Example(features=tf.train.Features(
             feature=feat))
         builder.append(example.SerializeToString(), example_id, event_time,
                        i, i)
     fpaths = [
         os.path.join(raw_data_dir, f)
         for f in gfile.ListDirectory(raw_data_dir)
         if not gfile.IsDirectory(os.path.join(raw_data_dir, f))
     ]
     for fpath in fpaths:
         if not fpath.endswith(common.DataBlockSuffix):
             gfile.Remove(fpath)
Example #2
0
    def _create_data_block(self, partition_id):
        dbm = data_block_manager.DataBlockManager(self.data_source,
                                                  partition_id)
        self.assertEqual(dbm.get_dumped_data_block_count(), 0)
        self.assertEqual(dbm.get_lastest_data_block_meta(), None)

        leader_index = 0
        follower_index = 65536
        for i in range(64):
            builder = data_block_manager.DataBlockBuilder(
                self.data_source.data_block_dir,
                self.data_source.data_source_meta.name, partition_id, i, None)
            builder.set_data_block_manager(dbm)
            for j in range(4):
                feat = {}
                example_id = '{}'.format(i * 1024 + j).encode()
                feat['example_id'] = tf.train.Feature(
                    bytes_list=tf.train.BytesList(value=[example_id]))
                event_time = random.randint(0, 10)
                feat['event_time'] = tf.train.Feature(
                    int64_list=tf.train.Int64List(value=[event_time]))
                feat['leader_index'] = tf.train.Feature(
                    int64_list=tf.train.Int64List(value=[leader_index]))
                feat['follower_index'] = tf.train.Feature(
                    int64_list=tf.train.Int64List(value=[follower_index]))
                example = tf.train.Example(features=tf.train.Features(
                    feature=feat))
                builder.append(example.SerializeToString(), example_id,
                               event_time, leader_index, follower_index)
                leader_index += 1
                follower_index += 1
            self.data_block_matas.append(builder.finish_data_block())
Example #3
0
 def generate_raw_data(self, data_source, partition_id, block_size,
                       shuffle_win_size, feat_key_fmt, feat_val_fmt):
     dbm = data_block_manager.DataBlockManager(data_source, partition_id)
     raw_data_dir = os.path.join(data_source.raw_data_dir,
                                 'partition_{}'.format(partition_id))
     if gfile.Exists(raw_data_dir):
         gfile.DeleteRecursively(raw_data_dir)
     gfile.MakeDirs(raw_data_dir)
     useless_index = 0
     for block_index in range(self.total_index // block_size):
         builder = data_block_manager.DataBlockBuilder(
             data_source.raw_data_dir, partition_id, block_index, None)
         cands = list(
             range(block_index * block_size,
                   (block_index + 1) * block_size))
         start_index = cands[0]
         for i in range(len(cands)):
             if random.randint(1, 4) > 2:
                 continue
             a = random.randint(i - shuffle_win_size, i + shuffle_win_size)
             b = random.randint(i - shuffle_win_size, i + shuffle_win_size)
             if a < 0:
                 a = 0
             if a >= len(cands):
                 a = len(cands) - 1
             if b < 0:
                 b = 0
             if b >= len(cands):
                 b = len(cands) - 1
             if (abs(cands[a] - i - start_index) <= shuffle_win_size and
                     abs(cands[b] - i - start_index) <= shuffle_win_size):
                 cands[a], cands[b] = cands[b], cands[a]
         for example_idx in cands:
             feat = {}
             example_id = '{}'.format(example_idx).encode()
             feat['example_id'] = tf.train.Feature(
                 bytes_list=tf.train.BytesList(value=[example_id]))
             event_time = 150000000 + example_idx
             feat['event_time'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[event_time]))
             feat[feat_key_fmt.format(example_idx)] = tf.train.Feature(
                 bytes_list=tf.train.BytesList(
                     value=[feat_val_fmt.format(example_idx).encode()]))
             example = tf.train.Example(features=tf.train.Features(
                 feature=feat))
             builder.append(example.SerializeToString(), example_id,
                            event_time, useless_index, useless_index)
             useless_index += 1
         builder.finish_data_block()
     fpaths = [
         os.path.join(raw_data_dir, f)
         for f in gfile.ListDirectory(raw_data_dir)
         if not gfile.IsDirectory(os.path.join(raw_data_dir, f))
     ]
     for fpath in fpaths:
         if not fpath.endswith(common.DataBlockSuffix):
             gfile.Remove(fpath)
 def generate_leader_raw_data(self):
     dbm = data_block_manager.DataBlockManager(self.data_source_l, 0)
     raw_data_dir = os.path.join(self.data_source_l.raw_data_dir,
                                 'partition_{}'.format(0))
     if gfile.Exists(raw_data_dir):
         gfile.DeleteRecursively(raw_data_dir)
     gfile.MakeDirs(raw_data_dir)
     block_index = 0
     builder = data_block_manager.DataBlockBuilder(
         self.data_source_l.raw_data_dir, 0, block_index, None)
     for i in range(0, self.leader_end_index + 3):
         if i > 0 and i % 2048 == 0:
             builder.finish_data_block()
             block_index += 1
             builder = data_block_manager.DataBlockBuilder(
                 self.data_source_l.raw_data_dir, 0, block_index, None)
         feat = {}
         pt = i + 1 << 30
         if i % 3 == 0:
             pt = i // 3
         example_id = '{}'.format(pt).encode()
         feat['example_id'] = tf.train.Feature(
             bytes_list=tf.train.BytesList(value=[example_id]))
         event_time = 150000000 + pt
         feat['event_time'] = tf.train.Feature(
             int64_list=tf.train.Int64List(value=[event_time]))
         example = tf.train.Example(features=tf.train.Features(
             feature=feat))
         builder.append(example.SerializeToString(), example_id, event_time,
                        i, i)
     builder.finish_data_block()
     fpaths = [
         os.path.join(raw_data_dir, f)
         for f in gfile.ListDirectory(raw_data_dir)
         if not gfile.IsDirectory(os.path.join(raw_data_dir, f))
     ]
     for fpath in fpaths:
         if not fpath.endswith(common.DataBlockSuffix):
             gfile.Remove(fpath)
     self.manifest_manager = raw_data_manifest_manager.RawDataManifestManager(
         self.etcd, self.data_source_l)
 def generate_follower_data_block(self):
     dbm = data_block_manager.DataBlockManager(self.data_source_f, 0)
     self.assertEqual(dbm.get_dumped_data_block_num(), 0)
     self.assertEqual(dbm.get_last_data_block_meta(), None)
     leader_index = 0
     follower_index = 65536
     self.dumped_metas = []
     for i in range(5):
         builder = data_block_manager.DataBlockBuilder(
             self.data_source_f.data_block_dir, 0, i, None)
         for j in range(1024):
             feat = {}
             example_id = '{}'.format(i * 1024 + j).encode()
             feat['example_id'] = tf.train.Feature(
                 bytes_list=tf.train.BytesList(value=[example_id]))
             event_time = 150000000 + i * 1024 + j
             feat['event_time'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[event_time]))
             feat['leader_index'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[leader_index]))
             feat['follower_index'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[follower_index]))
             example = tf.train.Example(features=tf.train.Features(
                 feature=feat))
             builder.append(example.SerializeToString(), example_id,
                            event_time, leader_index, follower_index)
             leader_index += 3
             follower_index += 1
         builder.finish_data_block()
         meta = builder.get_data_block_meta()
         self.dumped_metas.append(meta)
         dbm.add_dumped_data_block_meta(meta)
     self.leader_start_index = 0
     self.leader_end_index = leader_index
     self.assertEqual(dbm.get_dumped_data_block_num(True), 5)
     for (idx, meta) in enumerate(self.dumped_metas):
         self.assertEqual(dbm.get_data_block_meta_by_index(idx)[0], meta)
     self.assertEqual(dbm.get_dumped_data_block_num(True), 5)
Example #6
0
 def generate_raw_data(self, begin_index, item_count):
     raw_data_dir = os.path.join(self.data_source.raw_data_dir,
                                 common.partition_repr(0))
     if not gfile.Exists(raw_data_dir):
         gfile.MakeDirs(raw_data_dir)
     self.total_raw_data_count += item_count
     useless_index = 0
     rdm = raw_data_visitor.RawDataManager(self.etcd, self.data_source, 0)
     fpaths = []
     for block_index in range(0, item_count // 2048):
         builder = data_block_manager.DataBlockBuilder(
             self.data_source.raw_data_dir,
             self.data_source.data_source_meta.name, 0, block_index, None)
         cands = list(
             range(begin_index + block_index * 2048,
                   begin_index + (block_index + 1) * 2048))
         start_index = cands[0]
         for i in range(len(cands)):
             if random.randint(1, 4) > 2:
                 continue
             a = random.randint(i - 32, i + 32)
             b = random.randint(i - 32, i + 32)
             if a < 0:
                 a = 0
             if a >= len(cands):
                 a = len(cands) - 1
             if b < 0:
                 b = 0
             if b >= len(cands):
                 b = len(cands) - 1
             if (abs(cands[a] - i - start_index) <= 32
                     and abs(cands[b] - i - start_index) <= 32):
                 cands[a], cands[b] = cands[b], cands[a]
         for example_idx in cands:
             feat = {}
             example_id = '{}'.format(example_idx).encode()
             feat['example_id'] = tf.train.Feature(
                 bytes_list=tf.train.BytesList(value=[example_id]))
             event_time = 150000000 + example_idx
             feat['event_time'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[event_time]))
             example = tf.train.Example(features=tf.train.Features(
                 feature=feat))
             builder.append(example.SerializeToString(), example_id,
                            event_time, useless_index, useless_index)
             useless_index += 1
         meta = builder.finish_data_block()
         fname = common.encode_data_block_fname(
             self.data_source.data_source_meta.name, meta)
         fpath = os.path.join(raw_data_dir, fname)
         fpaths.append(
             dj_pb.RawDataMeta(
                 file_path=fpath,
                 timestamp=timestamp_pb2.Timestamp(seconds=3)))
         self.g_data_block_index += 1
     all_files = [
         os.path.join(raw_data_dir, f)
         for f in gfile.ListDirectory(raw_data_dir)
         if not gfile.IsDirectory(os.path.join(raw_data_dir, f))
     ]
     for fpath in all_files:
         if not fpath.endswith(common.DataBlockSuffix):
             gfile.Remove(fpath)
     self.manifest_manager.add_raw_data(0, fpaths, False)
Example #7
0
 def test_data_block_manager(self):
     data_block_datas = []
     data_block_metas = []
     leader_index = 0
     follower_index = 65536
     for i in range(5):
         fill_examples = []
         builder = data_block_manager.DataBlockBuilder(
             self.data_source.data_block_dir, 0, i, None)
         for j in range(1024):
             feat = {}
             example_id = '{}'.format(i * 1024 + j).encode()
             feat['example_id'] = tf.train.Feature(
                 bytes_list=tf.train.BytesList(value=[example_id]))
             event_time = 150000000 + i * 1024 + j
             feat['event_time'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[event_time]))
             feat['leader_index'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[leader_index]))
             feat['follower_index'] = tf.train.Feature(
                 int64_list=tf.train.Int64List(value=[follower_index]))
             example = tf.train.Example(features=tf.train.Features(
                 feature=feat))
             builder.append(example.SerializeToString(), example_id,
                            event_time, leader_index, follower_index)
             fill_examples.append((example, {
                 'example_id': example_id,
                 'event_time': event_time,
                 'leader_index': leader_index,
                 'follower_index': follower_index
             }))
             leader_index += 1
             follower_index += 1
         builder.finish_data_block()
         data_block_datas.append(fill_examples)
         data_block_metas.append(builder.get_data_block_meta())
     self.assertEqual(self.data_block_manager.get_dumped_data_block_num(),
                      0)
     self.assertEqual(self.data_block_manager.get_last_data_block_meta(),
                      None)
     self.assertEqual(
         self.data_block_manager.get_dumped_data_block_num(True), 5)
     for (idx, meta) in enumerate(data_block_metas):
         self.assertEqual(
             self.data_block_manager.get_data_block_meta_by_index(idx)[0],
             meta)
         self.assertEqual(
             meta.block_id, '{}-{}_{}'.format(meta.start_time,
                                              meta.end_time, idx))
     self.assertEqual(
         self.data_block_manager.get_data_block_meta_by_index(5)[0], None)
     data_block_dir = os.path.join(self.data_source.data_block_dir,
                                   'partition_{}'.format(0))
     for (i, meta) in enumerate(data_block_metas):
         data_block_fpath = os.path.join(
             data_block_dir, meta.block_id) + common.DataBlockSuffix
         data_block_meta_fpath = os.path.join(
             data_block_dir, meta.block_id) + common.DataBlockMetaSuffix
         self.assertTrue(gfile.Exists(data_block_fpath))
         self.assertTrue(gfile.Exists(data_block_meta_fpath))
         fiter = tf.io.tf_record_iterator(data_block_meta_fpath)
         remote_meta = dj_pb.DataBlockMeta()
         remote_meta.ParseFromString(next(fiter))
         self.assertEqual(meta, remote_meta)
         for (j, record) in enumerate(
                 tf.io.tf_record_iterator(data_block_fpath)):
             example = tf.train.Example()
             example.ParseFromString(record)
             stored_data = data_block_datas[i][j]
             self.assertEqual(example, stored_data[0])
             feat = example.features.feature
             stored_feat = stored_data[1]
             self.assertTrue('example_id' in feat)
             self.assertTrue('example_id' in stored_feat)
             self.assertEqual(stored_feat['example_id'],
                              '{}'.format(i * 1024 + j).encode())
             self.assertEqual(stored_feat['example_id'],
                              feat['example_id'].bytes_list.value[0])
             self.assertTrue('event_time' in feat)
             self.assertTrue('event_time' in stored_feat)
             self.assertEqual(stored_feat['event_time'],
                              feat['event_time'].int64_list.value[0])
             self.assertTrue('leader_index' in feat)
             self.assertTrue('leader_index' in stored_feat)
             self.assertEqual(stored_feat['leader_index'],
                              feat['leader_index'].int64_list.value[0])
             self.assertTrue('follower_index' in feat)
             self.assertTrue('follower_index' in stored_feat)
             self.assertEqual(stored_feat['follower_index'],
                              feat['follower_index'].int64_list.value[0])
         self.assertEqual(j, 1023)