killbill-memoizeit

Details

diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
index a7084a5..959d8bd 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
@@ -114,7 +114,7 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
                 return ImmutableList.copyOf(Collections2.transform(tenantKV, new Function<TenantKVModelDao, String>() {
                     @Override
                     public String apply(final TenantKVModelDao in) {
-                        return in.getValue();
+                        return in.getTenantValue();
                     }
                 }));
             }
@@ -138,7 +138,12 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
         transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
             @Override
             public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
-                entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).markTenantKeyAsDeleted(key, context);
+                final List<TenantKVModelDao> tenantKVs = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context);
+                for (TenantKVModelDao cur : tenantKVs) {
+                    if (cur.getTenantKey().equals(key)) {
+                        entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).markTenantKeyAsDeleted(cur.getId().toString(), context);
+                    }
+                }
                 return null;
             }
         });
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
index 516ce59..362bbbe 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
@@ -27,25 +27,26 @@ import com.ning.billing.util.entity.dao.EntityModelDao;
 
 public class TenantKVModelDao extends EntityBase implements EntityModelDao<TenantKV> {
 
-    private String key;
-    private String value;
+    private String tenantKey;
+    private String tenantValue;
+
     private Boolean isActive;
 
     public TenantKVModelDao() { /* For the DAO mapper */ }
 
     public TenantKVModelDao(final UUID id, final DateTime createdDate, final DateTime updatedDate, final String key, final String value) {
         super(id, createdDate, updatedDate);
-        this.key = key;
-        this.value = value;
+        this.tenantKey = key;
+        this.tenantValue = value;
         this.isActive = true;
     }
 
-    public String getKey() {
-        return key;
+    public String getTenantKey() {
+        return tenantKey;
     }
 
-    public String getValue() {
-        return value;
+    public String getTenantValue() {
+        return tenantValue;
     }
 
     public Boolean getIsActive() {
@@ -56,8 +57,8 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("TenantKVModelDao");
-        sb.append("{key='").append(key).append('\'');
-        sb.append(", value='").append(value).append('\'');
+        sb.append("{key='").append(tenantKey).append('\'');
+        sb.append(", value='").append(tenantValue).append('\'');
         sb.append(", isActive=").append(isActive);
         sb.append('}');
         return sb.toString();
@@ -80,10 +81,10 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
         if (isActive != null ? !isActive.equals(that.isActive) : that.isActive != null) {
             return false;
         }
-        if (key != null ? !key.equals(that.key) : that.key != null) {
+        if (tenantKey != null ? !tenantKey.equals(that.tenantKey) : that.tenantKey != null) {
             return false;
         }
-        if (value != null ? !value.equals(that.value) : that.value != null) {
+        if (tenantValue != null ? !tenantValue.equals(that.tenantValue) : that.tenantValue != null) {
             return false;
         }
 
@@ -93,8 +94,8 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
     @Override
     public int hashCode() {
         int result = super.hashCode();
-        result = 31 * result + (key != null ? key.hashCode() : 0);
-        result = 31 * result + (value != null ? value.hashCode() : 0);
+        result = 31 * result + (tenantKey != null ? tenantKey.hashCode() : 0);
+        result = 31 * result + (tenantValue != null ? tenantValue.hashCode() : 0);
         result = 31 * result + (isActive != null ? isActive.hashCode() : 0);
         return result;
     }
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
index f75be0f..0ff9119 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
@@ -35,11 +35,11 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
 public interface TenantKVSqlDao extends EntitySqlDao<TenantKVModelDao, TenantKV> {
 
     @SqlQuery
-    public List<TenantKVModelDao> getTenantValueForKey(@Bind("key") final String key,
+    public List<TenantKVModelDao> getTenantValueForKey(@Bind("tenantKey") final String key,
                                                        @BindBean final InternalTenantContext context);
 
     @SqlUpdate
     @Audited(ChangeType.DELETE)
-    public void markTenantKeyAsDeleted(@Bind("key") final String key,
+    public void markTenantKeyAsDeleted(@Bind("id")final String id,
                                        @BindBean final InternalCallContext context);
 }
diff --git a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
index 20edb99..b44b46c 100644
--- a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
+++ b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
@@ -3,8 +3,8 @@ group TenantKVSqlDao: EntitySqlDao;
 tableName() ::= "tenant_kvs"
 
 tableFields(prefix) ::= <<
-  <prefix>t_key
-, <prefix>t_value
+  <prefix>tenant_key
+, <prefix>tenant_value
 , <prefix>is_active
 , <prefix>created_date
 , <prefix>created_by
@@ -13,8 +13,8 @@ tableFields(prefix) ::= <<
 >>
 
 tableValues() ::= <<
-  :key
-, :value
+  :tenantKey
+, :tenantValue
 , :isActive
 , :createdDate
 , :createdBy
@@ -31,7 +31,8 @@ getTenantValueForKey() ::= <<
 select
   <allTableFields("t.")>
 from <tableName()> t
-where t.t_key = :key
+where t.tenant_key = :tenantKey
+and  t.is_active = 1
 <AND_CHECK_TENANT("t.")>
 ;
 >>
@@ -39,7 +40,7 @@ where t.t_key = :key
 markTenantKeyAsDeleted() ::= <<
 update <tableName()> t
 set t.is_active = 0
-where t.t_key = :key
+where t.id = :id
 <AND_CHECK_TENANT("t.")>
 ;
 >>
diff --git a/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql b/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
index 4096d11..664a2e0 100644
--- a/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
+++ b/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
@@ -21,12 +21,13 @@ CREATE TABLE tenant_kvs (
    record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
    id char(36) NOT NULL,
    tenant_record_id int(11) unsigned default null,
-   t_key varchar(64) NOT NULL,
-   t_value varchar(1024) NOT NULL,
+   tenant_key varchar(64) NOT NULL,
+   tenant_value varchar(1024) NOT NULL,
+   is_active bool DEFAULT 1,
    created_date datetime NOT NULL,
    created_by varchar(50) NOT NULL,
    updated_date datetime DEFAULT NULL,
    updated_by varchar(50) DEFAULT NULL,
    PRIMARY KEY(record_id)
 ) ENGINE=innodb;
-CREATE INDEX tenant_kvs_key ON tenant_kvs(tenant_record_id, t_key);
+CREATE INDEX tenant_kvs_key ON tenant_kvs(tenant_key);