Add job Id to state document IDs (elastic/elasticsearch#579)
* Persist quantile documents with the jobId in the document Id * Add job Id to snapshot Id * Add job Id to categoriser state document Id * Rename quantiles doc to start with job id as the other state docs do * Fix restoring categoriser state Original commit: elastic/x-pack-elasticsearch@3e5d3368b5
This commit is contained in:
parent
316f6bf6cb
commit
78fdca65d5
|
@ -18,6 +18,10 @@ public class CategorizerState {
|
||||||
*/
|
*/
|
||||||
public static final String TYPE = "categorizer_state";
|
public static final String TYPE = "categorizer_state";
|
||||||
|
|
||||||
|
public static final String categorizerStateDocId(String jobId, int docNum) {
|
||||||
|
return jobId + "_" + docNum;
|
||||||
|
}
|
||||||
|
|
||||||
private CategorizerState() {
|
private CategorizerState() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -857,10 +857,11 @@ public class JobProvider {
|
||||||
public Optional<Quantiles> getQuantiles(String jobId) {
|
public Optional<Quantiles> getQuantiles(String jobId) {
|
||||||
String indexName = AnomalyDetectorsIndex.getJobIndexName(jobId);
|
String indexName = AnomalyDetectorsIndex.getJobIndexName(jobId);
|
||||||
try {
|
try {
|
||||||
LOGGER.trace("ES API CALL: get ID " + Quantiles.QUANTILES_ID +
|
String quantilesId = Quantiles.quantilesId(jobId);
|
||||||
" type " + Quantiles.TYPE + " from index " + indexName);
|
|
||||||
|
LOGGER.trace("ES API CALL: get ID {} type {} from index {}", quantilesId, Quantiles.TYPE.getPreferredName(), indexName);
|
||||||
GetResponse response = client.prepareGet(
|
GetResponse response = client.prepareGet(
|
||||||
indexName, Quantiles.TYPE.getPreferredName(), Quantiles.QUANTILES_ID).get();
|
indexName, Quantiles.TYPE.getPreferredName(), quantilesId).get();
|
||||||
if (!response.isExists()) {
|
if (!response.isExists()) {
|
||||||
LOGGER.info("There are currently no quantiles for job " + jobId);
|
LOGGER.info("There are currently no quantiles for job " + jobId);
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
|
@ -982,7 +983,7 @@ public class JobProvider {
|
||||||
// count up until a document is not found. It's NOT an error to have no categorizer state.
|
// count up until a document is not found. It's NOT an error to have no categorizer state.
|
||||||
int docNum = 0;
|
int docNum = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
String docId = Integer.toString(++docNum);
|
String docId = CategorizerState.categorizerStateDocId(jobId, ++docNum);
|
||||||
|
|
||||||
LOGGER.trace("ES API CALL: get ID {} type {} from index {}", docId, CategorizerState.TYPE, indexName);
|
LOGGER.trace("ES API CALL: get ID {} type {} from index {}", docId, CategorizerState.TYPE, indexName);
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class JobResultsPersister extends AbstractComponent {
|
||||||
*/
|
*/
|
||||||
public void persistQuantiles(Quantiles quantiles) {
|
public void persistQuantiles(Quantiles quantiles) {
|
||||||
Persistable persistable = new Persistable(quantiles.getJobId(), quantiles, Quantiles.TYPE.getPreferredName(),
|
Persistable persistable = new Persistable(quantiles.getJobId(), quantiles, Quantiles.TYPE.getPreferredName(),
|
||||||
Quantiles.QUANTILES_ID);
|
Quantiles.quantilesId(quantiles.getJobId()));
|
||||||
if (persistable.persist()) {
|
if (persistable.persist()) {
|
||||||
// Refresh the index when persisting quantiles so that previously
|
// Refresh the index when persisting quantiles so that previously
|
||||||
// persisted results will be available for searching. Do this using the
|
// persisted results will be available for searching. Do this using the
|
||||||
|
@ -282,8 +282,7 @@ public class JobResultsPersister extends AbstractComponent {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Once all the job data has been written this function will be
|
* Once all the job data has been written this function will be
|
||||||
* called to commit the data if the implementing persister requires
|
* called to commit the writes to the datastore.
|
||||||
* it.
|
|
||||||
*
|
*
|
||||||
* @return True if successful
|
* @return True if successful
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,7 +24,6 @@ import java.util.Objects;
|
||||||
* Quantiles Result POJO
|
* Quantiles Result POJO
|
||||||
*/
|
*/
|
||||||
public class Quantiles extends ToXContentToBytes implements Writeable {
|
public class Quantiles extends ToXContentToBytes implements Writeable {
|
||||||
public static final String QUANTILES_ID = "hierarchical";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Field Names
|
* Field Names
|
||||||
|
@ -46,6 +45,10 @@ public class Quantiles extends ToXContentToBytes implements Writeable {
|
||||||
PARSER.declareString(ConstructingObjectParser.constructorArg(), QUANTILE_STATE);
|
PARSER.declareString(ConstructingObjectParser.constructorArg(), QUANTILE_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String quantilesId(String jobId) {
|
||||||
|
return jobId + "-" + TYPE.getPreferredName();
|
||||||
|
}
|
||||||
|
|
||||||
private final String jobId;
|
private final String jobId;
|
||||||
private final Date timestamp;
|
private final Date timestamp;
|
||||||
private final String quantileState;
|
private final String quantileState;
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class JobProviderTests extends ESTestCase {
|
||||||
|
|
||||||
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
||||||
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
||||||
.throwMissingIndexOnPrepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.QUANTILES_ID);
|
.throwMissingIndexOnPrepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.quantilesId(JOB_ID));
|
||||||
|
|
||||||
JobProvider provider = createProvider(clientBuilder.build());
|
JobProvider provider = createProvider(clientBuilder.build());
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ public class JobProviderTests extends ESTestCase {
|
||||||
|
|
||||||
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
||||||
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
||||||
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.QUANTILES_ID, getResponse);
|
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.quantilesId(JOB_ID), getResponse);
|
||||||
|
|
||||||
JobProvider provider = createProvider(clientBuilder.build());
|
JobProvider provider = createProvider(clientBuilder.build());
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public class JobProviderTests extends ESTestCase {
|
||||||
|
|
||||||
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
||||||
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
||||||
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.QUANTILES_ID, getResponse);
|
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.quantilesId(JOB_ID), getResponse);
|
||||||
|
|
||||||
JobProvider provider = createProvider(clientBuilder.build());
|
JobProvider provider = createProvider(clientBuilder.build());
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ public class JobProviderTests extends ESTestCase {
|
||||||
|
|
||||||
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
||||||
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
||||||
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.QUANTILES_ID, getResponse);
|
.prepareGet(INDEX_NAME, Quantiles.TYPE.getPreferredName(), Quantiles.quantilesId("foo"), getResponse);
|
||||||
|
|
||||||
JobProvider provider = createProvider(clientBuilder.build());
|
JobProvider provider = createProvider(clientBuilder.build());
|
||||||
|
|
||||||
|
@ -1077,8 +1077,8 @@ public class JobProviderTests extends ESTestCase {
|
||||||
|
|
||||||
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
MockClientBuilder clientBuilder = new MockClientBuilder(CLUSTER_NAME).addClusterStatusYellowResponse()
|
||||||
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
.addIndicesExistsResponse(JobProvider.PRELERT_USAGE_INDEX, true)
|
||||||
.prepareGet(INDEX_NAME, CategorizerState.TYPE, "1", categorizerStateGetResponse1)
|
.prepareGet(INDEX_NAME, CategorizerState.TYPE, JOB_ID + "_1", categorizerStateGetResponse1)
|
||||||
.prepareGet(INDEX_NAME, CategorizerState.TYPE, "2", categorizerStateGetResponse2)
|
.prepareGet(INDEX_NAME, CategorizerState.TYPE, JOB_ID + "_2", categorizerStateGetResponse2)
|
||||||
.prepareGet(INDEX_NAME, ModelState.TYPE.getPreferredName(), "123_1", modelStateGetResponse1)
|
.prepareGet(INDEX_NAME, ModelState.TYPE.getPreferredName(), "123_1", modelStateGetResponse1)
|
||||||
.prepareGet(INDEX_NAME, ModelState.TYPE.getPreferredName(), "123_2", modelStateGetResponse2);
|
.prepareGet(INDEX_NAME, ModelState.TYPE.getPreferredName(), "123_2", modelStateGetResponse2);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue