aboutsummaryrefslogtreecommitdiffstats
path: root/music-core/src/main/java/org/onap/music/service/MusicCoreService.java
blob: 753d9b280aa455ad8cc7cae96efaf1c56c094422 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*
 * ============LICENSE_START==========================================
 * org.onap.music
 * ===================================================================
 *  Copyright (c) 2017 AT&T Intellectual Property
 * ===================================================================
 *  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.
 *
 * ============LICENSE_END=============================================
 * ====================================================================
 */

package org.onap.music.service;

import java.util.List;
import java.util.Map;

import javax.ws.rs.core.MultivaluedMap;

import org.onap.music.datastore.Condition;
import org.onap.music.datastore.PreparedQueryObject;
import org.onap.music.datastore.jsonobjects.JsonDelete;
import org.onap.music.datastore.jsonobjects.JsonIndex;
import org.onap.music.datastore.jsonobjects.JsonInsert;
import org.onap.music.datastore.jsonobjects.JsonKeySpace;
import org.onap.music.datastore.jsonobjects.JsonSelect;
import org.onap.music.datastore.jsonobjects.JsonTable;
import org.onap.music.datastore.jsonobjects.JsonUpdate;
import org.onap.music.exceptions.MusicLockingException;
import org.onap.music.exceptions.MusicQueryException;
import org.onap.music.exceptions.MusicServiceException;
import org.onap.music.lockingservice.cassandra.LockType;
import org.onap.music.lockingservice.cassandra.MusicLockState;
import org.onap.music.main.ResultType;
import org.onap.music.main.ReturnType;

import com.datastax.driver.core.ResultSet;

public interface MusicCoreService {

    
    // Core Music Database Methods
    

    public ReturnType eventualPut(PreparedQueryObject queryObject);
    
    public  ReturnType eventualPut_nb(PreparedQueryObject queryObject,String keyspace,String tablename,String primaryKey);

    public ReturnType criticalPut(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject, String lockId, Condition conditionInfo);

    public ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency)
        throws MusicServiceException,MusicQueryException;

    public ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException;

    public ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException;

    public ReturnType atomicPutWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException;
    
    public  ResultSet atomicGetWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException;

    public ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject, Condition conditionInfo)
        throws MusicLockingException, MusicQueryException, MusicServiceException;

    public ResultSet criticalGet(String keyspaceName, String tableName, String primaryKey,
        PreparedQueryObject queryObject, String lockId) throws MusicServiceException;

    // Core Music Locking Service Methods

    /**
     * Create a lock ref in the music lock store.
     * Default is write as this is the safest semantically
     * 
     * @param fullyQualifiedKey the key to create a lock on
     * @see {@link #creatLockReference(String, LockType)}
     */
    public String createLockReferenceAtomic(String fullyQualifiedKey) throws MusicLockingException; // lock name

    /**
     * Create a lock ref in the music lock store
     * @param fullyQualifiedKey the key to create a lock on
     * @param owner the owner of the lock, for deadlock prevention
     */
    public String createLockReference(String fullyQualifiedKey, String owner) throws MusicLockingException;

    /**
     * Create a lock ref in the music lock store
     * @param fullyQualifiedKey the key to create a lock on
     * @param locktype the type of lock create, see {@link LockType}
     */
    public String createLockReferenceAtomic(String fullyQualifiedKey, LockType locktype) throws MusicLockingException;
    
    /**
     * Create a lock ref in the music lock store
     * @param fullyQualifiedKey the key to create a lock on
     * @param locktype the type of lock create, see {@link LockType}
     * @param owner the owner of the lock, for deadlock prevention
     */
    public String createLockReference(String fullyQualifiedKey, LockType locktype, String owner) throws MusicLockingException;

    public ReturnType acquireLockWithLease(String key, String lockReference, long leasePeriod)
        throws MusicLockingException, MusicQueryException, MusicServiceException; // key,lock id,time

    public ReturnType acquireLock(String key, String lockReference)
        throws MusicLockingException, MusicQueryException, MusicServiceException; // key,lock id

    public ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject,
        String consistency) throws MusicServiceException;

    public ResultSet quorumGet(PreparedQueryObject query);

    /**
     * Gets top of queue for fullyQualifiedKey
     * @param fullyQualifiedKey
     * @return
     */
    public String whoseTurnIsIt(String fullyQualifiedKey);// lock name
    
    /**
     * Gets the current lockholder(s) for lockName
     * @param lockName
     * @return
     */
    public List<String> getCurrentLockHolders(String fullyQualifiedKey);

    public void destroyLockRef(String lockId) throws MusicLockingException;
    
    public void deleteLock(String lockName) throws MusicLockingException;
    
    public ReturnType promoteLock(String lockIdToPromote) throws MusicLockingException;
    
    public List<String> getLockQueue(String fullyQualifiedKey)
        throws MusicServiceException, MusicQueryException, MusicLockingException;
    
    public long getLockQueueSize(String fullyQualifiedKey)
        throws MusicServiceException, MusicQueryException, MusicLockingException;

    public Map<String, Object> validateLock(String lockName);

    public MusicLockState releaseLock(String lockId, boolean voluntaryRelease) throws MusicLockingException;

	public List<String> releaseAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicLockingException, MusicServiceException, MusicQueryException;

    
    //Methods added for orm
    

    public ResultType createTable(JsonTable jsonTableObject, String consistencyInfo) throws MusicServiceException,MusicQueryException;
    
    public ResultType dropTable(JsonTable jsonTableObject, String consistencyInfo) 
            throws MusicServiceException,MusicQueryException;
    
    public ResultType createKeyspace(JsonKeySpace jsonKeySpaceObject,String consistencyInfo) throws MusicServiceException,MusicQueryException;
    
    public ResultType dropKeyspace(JsonKeySpace jsonKeySpaceObject, String consistencyInfo) 
            throws MusicServiceException,MusicQueryException;
    
    public ResultType createIndex(JsonIndex jsonIndexObject, String consistencyInfo) throws MusicServiceException,MusicQueryException;
    
    public ResultSet select(JsonSelect jsonSelect, MultivaluedMap<String, String> rowParams) throws MusicServiceException, MusicQueryException;
    
    public ResultSet selectCritical(JsonInsert jsonInsertObj, MultivaluedMap<String, String> rowParams) 
            throws MusicLockingException, MusicQueryException, MusicServiceException;
    
    public ReturnType insertIntoTable(JsonInsert jsonInsert) throws MusicLockingException, MusicQueryException, MusicServiceException;
    
    public ReturnType updateTable(JsonUpdate jsonUpdateObj,MultivaluedMap<String, String> rowParams) 
            throws MusicLockingException, MusicQueryException, MusicServiceException;
    
    public ReturnType deleteFromTable(JsonDelete jsonDeleteObj,MultivaluedMap<String, String> rowParams) 
            throws MusicLockingException, MusicQueryException, MusicServiceException;


}