删除命令不从 Aerospike 中删除记录

Delete command not removing records from Aerospike

我正在使用 Java Aerospike 客户端的以下方法来删除 records/bins:

 def truncate(startTime: Long, durableDelete: Boolean): List[AtomicInteger] = {
    logger.info(s"truncate($startTime) Triggered")

    val calendar = new GregorianCalendar()
    calendar.setTimeInMillis(startTime)

    // Define Scan and Write Policies
    val scanPolicy = new ScanPolicy()
    scanPolicy.filterExp = Exp.build(Exp.le(Exp.lastUpdate(), Exp.`val`(calendar)))
    val writePolicy = client.writePolicyDefault
    writePolicy.durableDelete = durableDelete

    // Scan all records such as LUT <= startTime
    for (recoverBins <- config.binsToRecover) yield {
      val recordCount = new AtomicInteger(0)
      client.scanAll(scanPolicy, recoverBins.namespace, recoverBins.set, new ScanCallback() {
        override def scanCallback(key: Key, record: Record): Unit = {
          recoverBins.specificBins match {
            // multi-bin scenario
            case Some(specificBins) =>
              specificBins foreach (bin => client.put(writePolicy, key, Bin.asNull(bin)))
              logger.debug(s"Bins $specificBins of record: $record with key: $key are set to NULL")

            // single-bin scenario
            case None =>
              client.delete(writePolicy, key)
              logger.debug(s"Record: $record with key: $key DELETED")
          }
          recordCount.incrementAndGet()
        }
      })

duruableDelete 设置为 true

问题是当我删除垃圾箱时 (Bin.asNull) 我可以立即看到结果但是当检查“已删除”键时我仍然可以看到它们 (aql> select * from ns.set where PK = <ShouldBeDeleted>

有什么想法吗?我做错了什么?


另一个问题:duruableDelete 是如何防止“僵尸记录”的?幕后发生了什么?

谢谢!

Zombie Record:早先从集群中删除但稍后在集群中恢复活动的记录。在各种情况下都可能发生这种情况。持久删除记录可以防止除其中一种情况外的所有情况。持久删除通过在集群中保存墓碑来实现。示例:您在主服务器和副本服务器上都有记录。您关闭主节点,然后非持久地删除集群中的记录。当你重新启动 master 时,记录将被复活。如果您持久删除,集群将有一个墓碑(假设您在墓碑生命周期内重新启动主服务器 - 默认为 1 天)并且当传入主服务器在加入集群时比较记录元数据时,它不会恢复其记录副本。