def test_concurrent_update(self):
        mmsc0 = MinMaxSumCountAggregator()
        mmsc1 = MinMaxSumCountAggregator()

        with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex:
            mmsc0.checkpoint = ex.submit(self.call_update, mmsc0).result()
            mmsc1.checkpoint = ex.submit(self.call_update, mmsc0).result()

            mmsc0.merge(mmsc1)

            mmsc0_checkpoint = mmsc0.checkpoint

            mmsc0.take_checkpoint()

            self.assertEqual(mmsc0_checkpoint, mmsc0.checkpoint)
            self.assertIsNot(mmsc0_checkpoint, mmsc0.checkpoint)
예제 #2
0
    def test_merge(self):
        mmsc1 = MinMaxSumCountAggregator()
        mmsc2 = MinMaxSumCountAggregator()

        checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2)

        mmsc1.checkpoint = checkpoint1
        mmsc2.checkpoint = checkpoint2

        mmsc1.merge(mmsc2)

        self.assertEqual(
            mmsc1.checkpoint,
            MinMaxSumCountAggregator._merge_checkpoint(checkpoint1,
                                                       checkpoint2),
        )
    def test_concurrent_update_and_checkpoint(self):
        mmsc0 = MinMaxSumCountAggregator()
        mmsc1 = MinMaxSumCountAggregator()
        mmsc1.checkpoint = MinMaxSumCountAggregator._TYPE(2**32, 0, 0, 0)

        with concurrent.futures.ThreadPoolExecutor(max_workers=1) as ex:
            fut = ex.submit(self.call_update, mmsc0)

            while not fut.done():
                mmsc0.take_checkpoint()
                mmsc0.merge(mmsc1)
                mmsc1.checkpoint = mmsc0.checkpoint

            mmsc0.take_checkpoint()
            mmsc0.merge(mmsc1)

            self.assertEqual(mmsc0.checkpoint, fut.result())
예제 #4
0
    def test_merge_with_empty(self):
        mmsc1 = MinMaxSumCountAggregator()
        mmsc2 = MinMaxSumCountAggregator()

        checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        mmsc1.checkpoint = checkpoint1

        mmsc1.merge(mmsc2)

        self.assertEqual(mmsc1.checkpoint, checkpoint1)
    def test_merge(self):
        mmsc1 = MinMaxSumCountAggregator()
        mmsc2 = MinMaxSumCountAggregator()

        checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2)

        mmsc1.checkpoint = checkpoint1
        mmsc2.checkpoint = checkpoint2

        mmsc1.last_update_timestamp = 100
        mmsc2.last_update_timestamp = 123

        mmsc1.merge(mmsc2)

        mmsc1_checkpoint = mmsc1.checkpoint
        mmsc1.checkpoint = checkpoint1
        mmsc2.checkpoint = checkpoint2

        mmsc1.merge(mmsc2)

        self.assertEqual(mmsc1_checkpoint, mmsc1.checkpoint)

        self.assertEqual(mmsc1.last_update_timestamp, 123)
    def test_merge_checkpoint(self):
        type_ = MinMaxSumCountAggregator._TYPE
        empty = MinMaxSumCountAggregator._EMPTY

        mmsc0 = MinMaxSumCountAggregator()
        mmsc1 = MinMaxSumCountAggregator()

        mmsc0.checkpoint = empty
        mmsc1.checkpoint = empty

        mmsc0.merge(mmsc1)
        self.assertEqual(mmsc0.checkpoint, mmsc1.checkpoint)

        mmsc0.checkpoint = empty
        mmsc1.checkpoint = type_(0, 0, 0, 0)

        mmsc0.merge(mmsc1)
        self.assertEqual(mmsc0.checkpoint, mmsc1.checkpoint)

        mmsc0.checkpoint = type_(0, 0, 0, 0)
        mmsc1.checkpoint = empty

        mmsc1.merge(mmsc0)
        self.assertEqual(mmsc1.checkpoint, mmsc0.checkpoint)

        mmsc0.checkpoint = type_(0, 0, 0, 0)
        mmsc1.checkpoint = type_(0, 0, 0, 0)

        mmsc0.merge(mmsc1)
        self.assertEqual(mmsc1.checkpoint, mmsc0.checkpoint)

        mmsc0.checkpoint = type_(44, 23, 55, 86)
        mmsc1.checkpoint = empty

        mmsc0.merge(mmsc1)
        self.assertEqual(mmsc0.checkpoint, type_(44, 23, 55, 86))

        mmsc0.checkpoint = type_(3, 150, 101, 3)
        mmsc1.checkpoint = type_(1, 33, 44, 2)

        mmsc0.merge(mmsc1)
        self.assertEqual(mmsc0.checkpoint, type_(1, 150, 101 + 44, 2 + 3))