aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DistributedSetBuilder.java
blob: f5a44c9346cc0c81275c501c65659d2b1f3241d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onosproject.store.service;

import org.onosproject.core.ApplicationId;

/**
 * Builder for distributed set.
 *
 * @param <E> type set elements.
 */
public interface DistributedSetBuilder<E> {

    /**
     * Sets the name of the set.
     * <p>
     * Each set is identified by a unique name.
     * </p>
     * <p>
     * Note: This is a mandatory parameter.
     * </p>
     *
     * @param name name of the set
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withName(String name);

    /**
     * Sets the owner applicationId for the set.
     * <p>
     * Note: If {@code purgeOnUninstall} option is enabled, applicationId
     * must be specified.
     * </p>
     *
     * @param id applicationId owning the set
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withApplicationId(ApplicationId id);

    /**
     * Sets a serializer that can be used to serialize
     * the elements add to the set. The serializer
     * builder should be pre-populated with any classes that will be
     * put into the set.
     * <p>
     * Note: This is a mandatory parameter.
     * </p>
     *
     * @param serializer serializer
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withSerializer(Serializer serializer);

    /**
     * Disables set updates.
     * <p>
     * Attempt to update the built set will throw {@code UnsupportedOperationException}.
     *
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withUpdatesDisabled();

    /**
     * Provides weak consistency for set reads.
     * <p>
     * While this can lead to improved read performance, it can also make the behavior
     * heard to reason. Only turn this on if you know what you are doing. By default
     * reads are strongly consistent.
     *
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withRelaxedReadConsistency();

    /**
     * Disables distribution of set entries across multiple database partitions.
     * <p>
     * When partitioning is disabled, the returned set will have a single partition
     * that spans the entire cluster. Furthermore, the changes made to the set are
     * ephemeral and do not survive a full cluster restart.
     * </p>
     * <p>
     * Disabling partitions is more appropriate when the returned set is used for
     * simple coordination activities and not for long term data persistence.
     * </p>
     * <p>
     * Note: By default partitions are enabled and entries in the set are durable.
     * </p>
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withPartitionsDisabled();

    /**
     * Instantiate Metrics service to gather usage and performance metrics.
     * By default usage information is enabled
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withMeteringDisabled();

    /**
     * Purges set contents when the application owning the set is uninstalled.
     * <p>
     * When this option is enabled, the caller must provide a applicationId via
     * the {@code withAppliationId} builder method.
     * <p>
     * By default set contents will NOT be purged when owning application is uninstalled.
     *
     * @return this DistributedSetBuilder
     */
    DistributedSetBuilder<E> withPurgeOnUninstall();

    /**
     * Builds an set based on the configuration options
     * supplied to this builder.
     *
     * @return new set
     * @throws java.lang.RuntimeException if a mandatory parameter is missing
     */
    DistributedSet<E> build();
}