I think the solution is to work with "using" and to call db_for_read router function in that.
On Sep 22, 4:06 pm, Sudhakar <[email protected]> wrote: > My router.py file is as below:- > > class shard_data: > id = 0 > > class AppRouter(object): > """A router to control all database operations on models in > that belongs to a app in APPS_WITH_DB""" > > def db_for_read(self, model, **hints): > "Point all operations on myapp models to 'other'" > shardval = (int(shard_data.id) % 6 # 6 shards > logging.debug('ROUTER: id:'+ str(shard_data.id)+ ': Shard:'+ > str(shardval)) > if shardval == 1: > return 'default' > elif shardval == 0: > return 'shard6' > else: > return "shard"+str(int(shardval)) > > def db_for_write(self, model, **hints): > "Point all operations on myapp models to 'other'" > shardval = (int(shard_data.id) % 6 # 6 shards > if shardval == 1: > return 'default' > elif shardval == 0: > return 'shard6' > else: > return "shard"+str(int(shardval)) > > def allow_relation(self, obj1, obj2, **hints): > "Allow any relation if a model in myapp is involved" > if obj1._meta.app_label == 'app' or obj2._meta.app_label == > 'app': > return True > return None > > def allow_syncdb(self, db, model): > "Make sure the myapp app only appears on the 'other' db" > if db == 'other': > return model._meta.app_label == 'app' > elif model._meta.app_label == 'app': > return False > return None > > def _insert(self, values, **kwargs): > return self.insert_query(self.model, values, **kwargs) > > my_restapi.py file > > def reqaccess(request, id, sessionkey, desc): > > shard_data.id = int(id) > user = user_service_api.load_sessionkey(id, session_key) > if user is not None: > user.desc = desc > player = user_service_api.save_player(player) > xmlstr = "<?xml version='1.0' encoding='utf-8'?>" > xmlstr += "<response>" > xmlstr += "<result>ACCESS_REQUESTED</result>" > xmlstr += "</response>" > return HttpResponse(xmlstr,'application/xml') > else: > xmlstr = "<?xml version='1.0' encoding='utf-8'?>" > xmlstr += "<response>" > xmlstr += "<result>false</result>" > xmlstr += "</response>" > return HttpResponse(xmlstr,'application/xml') > > urlpatterns = patterns('', > url(r'^RequestAccess/(?P<id>.+)/(?P<sessionkey>.+)/(?P<desc>.+)/ > $', req_access), > ) > > Request to please check the above code "router.py" and "my_restapi.py" > file. > This code is running perfect, but I want to cross check if > "RequestAccess" REST API invoked by the users more then 100 to 1000 of > users at a time then how the request will be handled in the django > using above code. > Do I need to modify anything in the router.py? or is there is any > wrong I'm doing in "reqaccess" definition for getting shard value? > I'm I missing any important point for handling shard_data.id in the > case of 1000 of users invoking RequestAccess REST API? > > My very concern is I'm identifying shard using "id" (which is user > primary key, if at a time 1000 of users invoked "RequestAccess" REST > API then they should not get other users response by chance. > I have some other API's same for storing users information and I don't > want other user's information to be stored in any other user's > profile. > Because of which I want to make sure whether above code is correct or > need any further modifications for data protection, so that the data > to be stored in correct Shard even-though if there are 1000's of > request at a time. > > Can I get any valuable feedback and suggestions -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

