MS Access Forum / Replication / October 2006
Indirect Sync A97 - Replication Manager
|
|
Thread rating:  |
I Need Help - 30 Dec 2005 22:59 GMT Is it true that Microsoft has now made the files necessary to implement indirect synchronization for A97 public? Does that mean it is no longer necessary to purchase a copy of a Developer's version to legally implement A97 indirect replication? I assume the combination of Microsoft's publicly available files and MichKa's TSI Synchronizer would be used to make indirect replication possible.
Yes? No? Maybe? Other?
TIA
I Need Help
David W. Fenton - 31 Dec 2005 03:33 GMT > Is it true that Microsoft has now made the files necessary to > implement indirect synchronization for A97 public? Does that mean [quoted text clipped - 5 lines] > > Yes? No? Maybe? Other? MichKa, with MS's permission, was including the synchronizers in his A97 TSI Synchronizer download years ago.
I've actually never implemented replication without ReplMan, so I can't say whether or not it works or not.
I do know that someone posting here trying to do the same with Jet 4 (the files for that can be freely downloaded from MS) and was having problems on the workstations that didn't have ReplMan installed. I suspect that there are some registry keys that need to be written that don't get written without ReplMan unless you do it manually, but I don't know if that's also the case with Jet 3.5.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 02 Jan 2006 00:55 GMT > Is it true that Microsoft has now made the files necessary to > implement indirect synchronization for A97 public? Does that mean it [quoted text clipped - 4 lines] > > Yes? No? Maybe? Other? I've recently spent some time implementing indirect synchronization in a project I'm working on. I wanted to be able to configure my application to control synchronization programatically and to support both direct and indirect methods. I spent a lot of time experimenting with the TSI synchronizer and found that I could do just about everything I wanted to do by using it's properties and methods. However, I encountered some problems which I was not able to solve which forced me to use JRO and some querying of a system table to work around. I'll try to give you a quick overview of what I learned.
There are people who have said that indirect synchronization can now be accomplished without installing Replication Manager but I have not been able to do that with Jet 4.0. The reason this is being said is that there is an update to replication manager which includes the jet synchronizer (mstran40.exe). It's true that if you download the service pack, jet40repl.exe, and install it, you will have a directory on your computer which will include the synchronizer. You can even start and stop it by double clicking on the file itself in windows explorer. You might be able to use the synchronizer with JRO at this point but you will not be able to control it using the TSI Synchronizer. I should explain that JRO has a method for initiating indirect syncrhonization which I do use but I never tried using it before I installed Replication Manager. That's why I said the JRO might work. However, before you can use the JRO method you need to set up a drop box on your computer. The easiest way I've found to do this is by using the TSI Synchronizer. I believe, however, that all that it does is to set a registry setting in the Transporter key under the jet 4.0 key. I have never tried to set this manually so I don't know if that is all that is needed or not. You would also need to make sure the synchronizer is running before you try to do indirect synchronization. The TSI object has a way of doing this, JRO does not.
I tried installing the service pack alone without having Replicaton Manager installed and here's what happened: The TSI synchronizer object has a property called "running" which when set to true will start the jet synchronizer and when set to false will stop the jet synchronizer. The jet sychronizer must be running in order for an indirect sychronization to succeed whether you initiate the syncrhonization with the TSI Synchronizer, JRO or even Replication Manager. With only the service pack installed, when I try to execute the line of code "sync.running = True" I get an error stating that the synchronizer could not be found. As soon as I install Replication Manager I can run the same code with no error and the jet sychronizer starts and stops on command. I can't figure out what Replication Manager does to enable the TSI Synchronizer to be able to find the jet synchronizer. I tried adding a Replication Manager key to the registry manually and putting a SynchronizerPath key in it with a path to the jet synchronizer file but that didn't work. When I install Replication Manager it does exactly that and the TSI object begins to work. This tells me that something else is being done when Replication Manger is installed. I don't know if that something else is the installation of a file or the registration of a dll or a registry key or something else. All I know is that the TSI synchronizer can start and stop the jet synchronizer once Replication Manager is installed.
Now for the next problem I encountered. After installing Replication Manager I could then synchronize indirectly by using the "synchindirect2" method of the TSI Synchronizer object. There are two methods available, one is "synchindirect" the other is "synchindirect2". The difference is explained in the help file. Basically I needed to use 2 because I wanted to be able to let the user know whether or not the synchronization succeeded and I also wanted to know when it was safe to stop the jet synchronizer from running. The synchindirect2 method returns an ExchangeID which can be used to get a HistoryItem object which has a status property which will let you know what the current status of the synchronization attempt is. I got everything to work flawlessly by using a timer event in the form I use to perform the synchronization. In the timer event I would check the HistoryItem.status every second until it returned either success, failure or cancel at which time I would report that to the user and stop the jet synchronizer from running by using the TSI Synchronizer object. I thought I was finished but then I decided that I would use the same form to enable the user to compact and repair the back end database as well as perform the synchroniztion. I discovered that when I attempted to compact the database after using the TSI Synchronizer object to do an indirect synchronization that I would get an error. For some reason, after the synchronization, an ldb file is left in the database directory which indicates that the database is opened by another user and this prevents me from being able to compact and repair the database. The only way I could get the ldb file to disappear was to close my front end application and then reopen it.
My solution to this problem was to use JRO instead of TSI to initiate the indirect synchronization. I still use TSI to configure the settings I need such as the drop box folder and the databases which the synchronizer is managing and I still start and stop the jet synchronizer by setting the TSI running property. I only use JRO to do the actual synchronization. When I do this, the ldb file disappears as soon as the synchronizer is stopped. Don't ask me why, it just works. However, now that I'm using JRO in can't use TSI to get the ExhangeID so that I can track the status of the synchronization. Instead, I studied the MSysExchangeLog system table and found that I could query it and get the same information the the TSI HistoryItem gave me before. So now I query the MSysExchangeLog table of the database I'm synchronizing immediately after initiating the synchronization to get the ExchangeID and then I query it repeatedly in my timer event to check on the status until the status indicates that the synchronization is complete.
This has been a long tedious process. It's not easy figuring this out because you have to have two separate computers set up and running just in order to test it. The most frustrating aspect is the almost complete lack of documentation on the subject. There's plenty of high level explanation about replicaton but very little documentation on the details behind the scenes. It's very disappointing to me that Microsoft hasn't done a better job than they have with the documentation of indirect replicaton and the jet synchronizer. I want to thank Michael Kaplan for making his TSI objects available. Without them I would never have figured out as much as I did. If Microsoft really wanted to make replicaton more available to Access developers they would have included all of the methods that the TSI objects contain in JRO. There's no reason why the couldn't have. They obviously don't want to make it easy for us. I can only assume they do this for financial gain. I guess they haven't gotten enough of our money yet.
David W. Fenton - 02 Jan 2006 01:22 GMT >> Is it true that Microsoft has now made the files necessary to >> implement indirect synchronization for A97 public? Does that [quoted text clipped - 8 lines] > I've recently spent some time implementing indirect > synchronization in a project I'm working on. . . . It's not clear to me that any of your travails are relevant to the question, as you were working with A2K and later, which offers JRO and has significant differences in replicaiton, and the questioner was asking about Jet 3.5 replication.
MichKa bundled the synchronizer with the TSI Synchronizer back then, and I'd expect that it must have worked without ReplMan installed.
Have you done as I suggested, and gone to MichKa's blog and contacted him to ask him about this issue?
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
David W. Fenton - 02 Jan 2006 01:26 GMT > This has been a long tedious process. It's not easy figuring this > out because you have to have two separate computers set up and [quoted text clipped - 12 lines] > easy for us. I can only assume they do this for financial gain. I > guess they haven't gotten enough of our money yet. They do it because they don't want people to use Jet -- they want them to buy SQL Server licenses.
And Jet replication in Access is basically dead in terms of future development. Access 12 will support all legacy Jet functionality, but will not add new functionality. And the new method for sharing data with Access will require a Sharepoint server.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
I Need Help - 03 Jan 2006 09:20 GMT >> Is it true that Microsoft has now made the files necessary to >> implement indirect synchronization for A97 public? Does that mean it [quoted text clipped - 99 lines] > >This has been a long tedious process. Your description is much appreciated. Thanks you. I'm sure it will be useful to me as I try to do the same with A97.
Has anybody had any luck with A97 using TSI Synchronizer but no Replication Manager? Mr. Fenton says that he "thinks" it is doable, but does not offer specific experience because, I think, he has been successful with other methods.
Thank you.
I Need Help
David W. Fenton - 03 Jan 2006 20:11 GMT > I'm sure it will > be useful to me as I try to do the same with A97. I don't think it will be much use at all, because replication was altered in extremely significant ways from Jet 3.5 to Jet 4. JRO did not even exist for Jet 3.5, so there was *no* alternative to the TSI Synchronizer for programmatic control of replication (that's precisely why MichKa took the time to create it).
> Has anybody had any luck with A97 using TSI Synchronizer but no > Replication Manager? Mr. Fenton says that he "thinks" it is > doable, but does not offer specific experience because, I think, > he has been successful with other methods. I've only used it with ReplMan installed, so I don't know if it works without the problems Tom encountered with Jet 4.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 07 Jan 2006 22:53 GMT In my searching for answers to many questions I recall reading instructions for how to enable indirect synchronization in Access 97 using TSI without installing Replication Manager. I believe that the synch35 download from TSI includes all of the files you need. If you do some searching online, I'm sure you'll find some answers. If I get a chance, I'll look for some of the links I found and post them for you.
As far as using the TSI synchronizer after it's installed, there shouldn't be any difference between 3.5 and 4.0 so I might be able to help you with those questions. I'm a little short of time this weekend or I'd find more information for you.
Good Luck!
> >> Is it true that Microsoft has now made the files necessary to > >> implement indirect synchronization for A97 public? Does that mean it [quoted text clipped - 111 lines] > > I Need Help I Need Help - 08 Jan 2006 04:41 GMT >In my searching for answers to many questions I recall reading instructions >for how to enable indirect synchronization in Access 97 using TSI without >installing Replication Manager. I would be very happy to see it.
> I believe that the synch35 download from TSI >includes all of the files you need. I have that already so I have the files, if correct.
> If you do some searching online, I'm >sure you'll find some answers. I did that and didn't find. :-(((
> If I get a chance, I'll look for some of the >links I found and post them for you. That would be very kind.
>As far as using the TSI synchronizer after it's installed, there shouldn't >be any difference between 3.5 and 4.0 so I might be able to help you with >those questions. I have difference computers and can run any type of tests. Just a little to get started is all I think I need. I'm willing to do many legs work.
> I'm a little short of time this weekend or I'd find more >information for you. You are very kind. I will wait.
I Need Help
Tom Stoddard - 09 Jan 2006 23:44 GMT What I was thinking of is actually the information in the help file which is included with the TSI Synchronizer download. There is information about what files you need to install if you don't want to use Replication Manager and where to put them. You can find that information by looking under "Indirect Synchronization" in the index of the help file. From that topic there is a link for "redistribution" which lists the files you need to distirbute with you application. There are instructions for creating a registry key as well which is the same as the registry key that Replication Manager creates when it's installed.
Have you read the help file yet?
I Need Help - 12 Jan 2006 11:08 GMT >What I was thinking of is actually the information in the help file which is >included with the TSI Synchronizer download. There is information about what [quoted text clipped - 7 lines] > >Have you read the help file yet? Yes. Many times. I am admittting that I must be missing something because things don't work.
Let's start with the basics. Download TSISynch35 from www.trigeminal.com. Unzip into separate folder. Copy all files (I know don't need all, but what the heck) to:
C:\Program Files\Common Files\Microsoft Shared\Replication Manager 3.5
Create registry key as per help file:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Replication Manager
Create string value of:
SynchronizerPath
Populate string value with where TSI Synch files put (same as above):
C:\Program Files\Common Files\Microsoft Shared\Replication Manager 3.5
Create new mdb file. Set reference to TSI Synchronizer 3.52 (make sure it shows up and the box is checked). Reference set by browsing to:
C:\Program Files\Common Files\Microsoft Shared\Replication Manager 3.5\synch35.dll
Create test form with single command button that has the following as the click event code:
Dim sync As Synchronizer Set sync = New Synchronizer Debug.Print sync.Version
When I click on the command button the second line pops an error:
429: ActiveX component can't create object.
I know it must be something simple. Can you spot additional step I need?
Thanks
I Need Help
I Need Help - 12 Jan 2006 11:56 GMT >>What I was thinking of is actually the information in the help file which is >>included with the TSI Synchronizer download. There is information about what [quoted text clipped - 49 lines] >I know it must be something simple. Can you spot additional step I >need? OK, left out step of:
regsvr32 synch35.dll
After that, second line no longer errors and debug window shows 3.52.5024.
I'll post later with next question.
Thanks
I Need Help
Tom Stoddard - 12 Jan 2006 19:16 GMT It probably doesn't matter, but the only files that you need to put in the Replication Manager directory are the jet synchronizers mstranXX.exe and mstraiXX.exe. You only need the mstran file for indirect synchronization, the mstrai file is for internet synchronization. I put the TSI synchronizer file ,synch40.dll (in my case), in my application directory. I remember reading a thread somewhere in which Michael Kaplan stated that he prefers not to put it in the system directory. He doesn't say that it won't work but he thinks it's better not to. You can get it to work without registering it but registering it does make it a little easier to set the reference.
The real test is whether or not the TSI Synchronizer object is able to control the Jet Synchronizer. You can test this by doing the following:
Dim sync As Synchronizer Set sync = New Synchronizer sync.running = True 'You should see the jet synchronizer pop up on the windows task bar after this line of code. MsgBox "Delay to check if synchronizer is running" sync.running = False 'The jet synchronizer button on the task bar should disappear. set sync = nothing
Make sure that the jet synchronizer is not running before you execute this code. If it is already running you will get an error. If not, the synchronizer should start running, the message box should pop up and then the synchronizer should stop running after you click "ok" on the message box. I was never able to get this to work without having Replication Manager installed first but I only tried it with 4.0. When I would set sync.running to True, I would get an error stating that the synchronizer could not be found. I'll be very curious to hear if you are able to do this without first installing Replication Manager.
Your original question is one that I've researched at length and have never seen a definitive answer to. I find it odd that it's so difficult to get a yes or no question answered on this topic. Hopefully your experience will help to answer this question for both of us.
Good Luck!
>>>What I was thinking of is actually the information in the help file which >>>is [quoted text clipped - 70 lines] > > I Need Help I Need Help - 12 Jan 2006 19:39 GMT >It probably doesn't matter, but the only files that you need to put in the >Replication Manager directory are the jet synchronizers mstranXX.exe and [quoted text clipped - 32 lines] >yes or no question answered on this topic. Hopefully your experience will >help to answer this question for both of us. If by original question, you mean: "Is it true that Microsoft has now made the files necessary to implement indirect synchronization for A97 public?" I think the answer is clearly yes, because I was able to run your test and the MSTRAN35.EXE process began and ended as per your comments.
I am close to running a real test, but I have one other question at the moment: When should the Jet Synchronizer be running? Does it need to be running 100% of the time that any replica that is managed is potentially being edited? [I wouldn't think so.] Does it need to be invoked immediately before a programmatic indirect synchronization is executed? [I think so.] Does it need to remain running until the aforementioned programmatic indirect synchronization completes? [I think so.]
I presume that to shut down the Jet Synchronizer would preclude any further progress on an indirect synch. That is, even if the remote dropbox becomes available, nothing will happen.
Basically, I'm confused about the order of things when you have a laptop which will be potentially on the move during the day and then plugged back in to the remote network at night.
Thanks
I Need Help (although less than before)
David W. Fenton - 12 Jan 2006 22:35 GMT > I am close to running a real test, but I have one other question > at the moment: When should the Jet Synchronizer be running? Does > it need to be running 100% of the time that any replica that is > managed is potentially being edited? [I wouldn't think so.] . . . Why? Only if you have scheduled synchs, which can only happen when the synchronizer is running. I believe that missed synchs occur the next time the synchronizer is started, but I could be misremembering that.
Obviously, if you have a replica farm with scheduled synchs, the synchronizer needs to be running all the time *somewhere*.
> . . . Does it need to be > invoked immediately before a programmatic indirect synchronization > is executed? [I think so.] . . . It has to be running first for the synch to take place, yes.
> . . . Does it need to remain running until the > aforementioned programmatic indirect synchronization completes? [I > think so.] Yes, of course. The synchronizer is the process that does all the actual work of indirect synchronization, copying files to the remote synchronizer's dropbox and processing the files in the local dropbox.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 12 Jan 2006 23:43 GMT ">
>> . . . Does it need to remain running until the >> aforementioned programmatic indirect synchronization completes? [I [quoted text clipped - 4 lines] > synchronizer's dropbox and processing the files in the local > dropbox. David is absolutely correct, the synchronizer needs to keep running until the synchronization process is complete. The trick is determining when it's safe to shut it down. That's the reason for the synchindirect2 method. When a synchronization starts, a record is written to the MSysExchangeLog table and a unique id is assigned to that record in the ExchangeID field. Then as the synchronizer does its job it ocassionally updates the Status field in that table with an integer indicating the current status of the exchange. The synchindirect2 method returns the exchangeID when it is executed so that you can periodically check the status of the synchronization. When the status indicates complete, failed, or cancelled it's safe to shut down the synchronizer. The TSI library includes constants to represent those values so you don't need to use the integers in your code. To check an exchange status with the TSI synchronizer, you need to use the HistoryItem object. It's documented in the help file. You'll need to use the HistoryItemOfExchangeID method to return a historyitem. Then you can check the status property of the historyitem object. You need to destroy the historyitem object after each use and create a new one in order to get the current status. There are no events that can be used with indirect synchronization as there are with direct synchronizations.
It is also possible to check the MSysExchangeLog directly in order to see the current status. It's probably easier and more efficient to use the TSI objects. I did it the hard way because of the difficulties I described back in my original post. Since you're running Access97 you probably have no reason not to use the TSI objects. I like to understand what's going on under the hood so I'm glad I took the time to figure this out. Like I've said before, not much of this is documented so I'm sharing my experience with this group in order to add to the available documentation that can be found on the web. I don't consider myself an expert programmer and I know that I'm far from perfect so please forgive any errors or incorrect terminology in my explanations.
Thanks for letting me know how you made out. I'm glad to hear that you can perform indirect synchronizations without installing replication manager. It gives me incentive to keep trying to make it work with 4.0.
I Need Help - 13 Jan 2006 11:32 GMT >"> >>> . . . Does it need to remain running until the [quoted text clipped - 41 lines] >perform indirect synchronizations without installing replication manager. It >gives me incentive to keep trying to make it work with 4.0. I think I spoke too soon. :((
I have everything "working", but nothing works. I could go on at length about how I think everything is working, but I will try to be brief (and probably fail).
2 computers. On LAN. Direct syncs work fine (both using Access GUI or using my front-end over TSISynch object). TSISynch docs say that it will do indirect if told to do indirect, even if shares are visible, so being on Lan shouldn't be a problem, right? Tried IndirectSynch and IndirectSynch2. Neither does anything different. Tried from each end. Same result each time. Exchange log shows each attempted sync with the dreaded "No suitable synchronizer found." message. Per trigeminal, a direct sync should get everything back working again. Nope. I can direct sync either direction (using Access GUI or using my front-end over TSIsynch object) and it will show up on the Exchange logs as a direct sync with no errors. But executing an indirect sync through TSIObject falls over.
Strange stuff, of course. Let's see. One way (from B => A) wingman.sgn gets created (with computer name - that is, about 8 byts of information) and that's it, in the correct (local) dropbox. But no other files are generated and the Exchange Log has the error message regarding no suitable synchronizer.
MSTran34 running on both computers. TSISynch-object based front end, run on each computer, shows that the dropbox is set properly on each and that, well, everything else is, too. My front end has a combo box for selection of a local replica and, once selected, it displays all of the members of the replica set associated with that replica, along with all of the managed local replicas (well, the one managed local replica, anyway), the dropbox name, the synchronizer name, the retention period, whether it is a design master.... basically most of the TSI-Synch properties. The display of the replica set members is in a list box with ReplicaName, Description, MachineName, ReplicaID, UNCName and Synchronizer ID. Everything looks ok to me (but that isn't saying much).
I guess it is the Empty Full Replica solution next (on the weekend), but I'm not holding out much hope for that considering trigeminal says a direct synch should fix the problem, too, and it doesn't.
Any other ideas?
I Need Help (more today than yesterday...going the wrong direction! ;-))
David W. Fenton - 13 Jan 2006 14:08 GMT > Any other ideas? Permissions on the two machines? That is, what user is logged on on the two machines? Do they have the same rights on the dropboxes? If you don't have a domain controller, you have to set up the user on both boxes with the same username.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 13 Jan 2006 14:57 GMT >> Any other ideas? > > Permissions on the two machines? That is, what user is logged on on > the two machines? Do they have the same rights on the dropboxes? If > you don't have a domain controller, you have to set up the user on > both boxes with the same username. I've been testing my application on a very insecure peer-to-peer network where most people log onto their machines as administrator. I log onto my machine with a different user name and I'm able to perform indirect synchronizations with replicas on other people's machines. The shares are set up to allow any user to have access.
Your point is a good one, though. Make sure that the users on both machines have permission to access the drop box folders on both machines. I've read several posts where you express the opion that most of the problems people experience with indirect synchronization are due to network configuration issues not jet or access. You are correct; getting the replicas located and configured correctly is extremely important.
Please forgive me for paraphrasing your statements, David. If I'm mistaken please correct me. I've read so much about this over the last month that I sometimes mix things up.
Tom Stoddard - 13 Jan 2006 14:44 GMT > I think I spoke too soon. :(( > [quoted text clipped - 42 lines] > I Need Help (more today than yesterday...going the wrong direction! > ;-)) I know your frustration. I think that the problems you are having have nothing to do with the TSI Synchronizer. First of all, I don't believe that an indirect synchronization will occur unless the mdb files are located in non shared directories. It seems like it should but I've read many times that it won't.
I tried similar experiments and ended up creating a whole new replica set before I finally got everything to work. The empty replica solution is probably the correct way to fix your problems if you are working with production data and don't have the luxury of starting over. I believe what is happening is that when replicas perform direct synchronizations the synchronizerID that is created in the system tables refers to a virtual synchronizer, not the indirect synchronizer (mstranXX.exe). As a result, because you performed direct synchronizations between these replicas already, the replica which you are trying to sync with indirectly has a synchronizer ID which does not correctly identify the jet "indirect" synchronizer. This is speculation on my part since I've not seen any documentation to confirm this.
I experimented with several different ways of retrieving the correct synchronizer ID and got the best results by specifying the machine name. I still ran into some trouble with that until I finally got my replica set configured correctly. The synchindirect methods of the TSI Synchronizer object accept several different values for their arguments; the one I settled on was the machine name. I don't know how TSI uses that argument to initiate the indirect synchronization but I would guess that it looks up a synchronizerID in the system tables to get it. When I use JRO to perform indirect synchronizations I use the machine name as well. What I've realized is that you shouldn't be concerned with which specific replica you are synching with but rather the synchronizer you want to work with. The synchronizer name is usually the same as the machine name.
You need to make sure that both replicas are in unshared folders and that they are both managed by their perspective jet synchronizers and that both synchronizers have drop boxes set up. I do believe that I was able to perform direct syncs and then unshare the folders and perform indirect syncs with the same replicas. But that was not until after I had indirect synchronizations working correctly. My experience was that most of the problems I had were related to the way I had my replica set configured not the code I was using.
I Need Help - 14 Jan 2006 00:02 GMT >> I think I spoke too soon. :(( Well, consistent with David's assertions as reported by you I delved into the system's permissions. While A=>B had unfettered access, B=>A had a real problem. That has been cleared up. Things are wide open now in both directions.
And a bit of progress on the indirect sync's. Now, an indirect sync from B=>A, run from B while the synchronizer is running, shows up in the Exchange Log with a status code of 0, rather than 3. I call that progress, I think.
What needs to be done to actually make the synchronizer start? I'm a bit concerned that since I rebuilt the replica set completely, that the synchronizer on B, which was set to manage "DB1.MDB" in a particular folder is looking for the OLD file, rather than the new one, although the name of the file is the same and I deleted the original while the synchronizer wasn't running and I started up the synchronizer after I had already replaced DB1, so I would think it should find it, if it ever goes looking for it.
I guess I'm asking whether it is mandatory to put an entry into the schedule of the synchronizer through TSISynch's SetFullSchedule or SetSimpleSchedule in order for it to attempt to initiate the sync. Something tells me the answer is yes (how else does it know to kick things off?).
Am I close?
Thanks
I (obviously still) Need Help
David W. Fenton - 14 Jan 2006 00:38 GMT > What needs to be done to actually make the synchronizer start? > I'm a bit concerned that since I rebuilt the replica set [quoted text clipped - 5 lines] > DB1, so I would think it should find it, if it ever goes looking > for it. Remember that the data regarding which replicas are managed is kept in the replication tables. If you don't unmanage a replica explicitly, that entry will remain in the system tables.
However, keep in mind that your replacement replica may have the same name/path, but it can't possibly have the same ReplicaID. I would say that the replacement managed replica is a major problem -- I'd unmanage, synch direct, then manage again. This should clear any references to the old managed replica and communicate that information to the other replica.
> I guess I'm asking whether it is mandatory to put an entry into > the schedule of the synchronizer through TSISynch's > SetFullSchedule or SetSimpleSchedule in order for it to attempt to > initiate the sync. Something tells me the answer is yes (how else > does it know to kick things off?). I don't recall that you needed to shedule anything to have it work. But I've always worked with the TSI Synchronizer in scenarios in which there *was* a scheduled synch, just not between the replicas that I was synching indirectly.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 15 Jan 2006 02:32 GMT > And a bit of progress on the indirect sync's. Now, an indirect sync > from B=>A, run from B while the synchronizer is running, shows up in > the Exchange Log with a status code of 0, rather than 3. I call that > progress, I think. A status code of 0 means that a synchronization has been requested. It will remain 0 until it the synchronizer on the other machine responds. At least that is what I think happens. All I can say for certain is that if the synchronizer on the other machine isn't running, the status will never change from 0 to 1. It's also possible that the other synchronizer is running and the status is still 0. In that case there is some bad information in the replicas tables. This goes back to having the replica set configured correctly. I've discovered that the replica set can be very fragile. You have to be very careful about making changes once you have replicas set up and managed.
From your description, I'd say that the replica on B is being managed by it's local synchronizer since you did get an entry in the Exchange log. What I would suggest is that you make a new replica from that replica and put it on machine A. To be safe, try putting it in a new location then start managing it with the synchronizer on that machine then try to initiate a synchronization from A=>B.
I assume that you know that you shouldn't open the new replica until after you have it where you want it unless you use the TSI Synchronizer to move it. This is critical.
> What needs to be done to actually make the synchronizer start? You can start the synchronizer by setting the TSI Sychronizer running property to true. You can also start it by finding it in Windows Explorer and double clicking on it. It doesn't matter which method you use but you will get an error if you try to start it with the TSI object if it is already running. There's no way to start the synchronizer on the other machine from a remote machine. You have to start it manually before you try to synch with it. Normally you will be synching with replicas on a server which leaves the synchronizer running all of the time. When you install Replication Manager on a machine it puts a short cut to the synchronizer in the start up folder so that the synchronizer starts up whenever the machine is booted. You should probably do the same. It is possible to create a schedule for synchronizations using TSI but initiating a sychronization won't start the synchronizer automatically. Normally, scheduled synchronizations involve direct syncs with replicas on the LAN. Indirect syncs are done primarily because one of the machines does not have a direct connection to the LAN. The remote machine would normally be the one that initiates the indirect sync.
> I'm a > bit concerned that since I rebuilt the replica set completely, that [quoted text clipped - 4 lines] > synchronizer after I had already replaced DB1, so I would think it > should find it, if it ever goes looking for it. I don't think it will look for it by name. I think it identifies replica by their replicaID. I thing that the replicaID of the new replica will be different than the old one even if they have the same name and are in the same location.
I want to emphasis how fragile the configuration of the replica set can be. I have a desktop machine at home that I use to test my work on. It has Replication Manager installed and I use replication manager to manage that replica. I have a laptop with another replica on it. On the laptop I manage synchronizations with the TSI synchronizer. I use code in my front end which uses TSI to tell the sychronizer to manage that replica. Earlier today I was modifying some code in my front end while working on the desktop PC. Without thinking about it, I initiated an indirect synchronization from the desktop machine using code. The code in my front end uses the TSI synchronizer to start the jet synchronizer before initiating the indirect synchronization. Usually I would use Replication Manager to do it from this machine. It resulted in an error which said that the same replica cannot be managed by more than one synchronizer. After that, I couldn't get an indirect sychronization to work again even by initiating it from the laptop or from Replication Manager on the desktop. I probably could have solved it with an empty replica but I took the easy way out and just created a new replica for my laptop. It's not good practice to continue creating new replicas everytime there's a problem with the replica set, however.
What I'm finding is that the best route is to set everything up correctly once and then don't mess with it.
I Need Help - 15 Jan 2006 07:46 GMT >> And a bit of progress on the indirect sync's. Now, an indirect sync >> from B=>A, run from B while the synchronizer is running, shows up in [quoted text clipped - 56 lines] >different than the old one even if they have the same name and are in the >same location. Does TSISynch expose the replicaID of the managed replicas? The help file appears to say that the replica set associated with managed replicas only exposes the managed replica's name.
>I want to emphasis how fragile the configuration of the replica set can be. >I have a desktop machine at home that I use to test my work on. It has [quoted text clipped - 17 lines] >What I'm finding is that the best route is to set everything up correctly >once and then don't mess with it. If I ever get there, I will certainly take THAT advice.
At this point, I want to thank both you and David for helping me. Even though I'm not there, yet, I have the feeling I'm getting closer and that wouldn't be possible without the help I'm getting here.
Some of what I'm doing now is being a bit stubborn with my currently failing because I would rather see if I can figure out how to hurdle these little problems now rather than later. While it might be easy for me to obliterate my test replica set and start over now I don't want to be in this position with a real replica set and not have already "been there, fixed that".
At least that is where I'm coming from at the moment.
With that said, I opened up a share between A and the directory with the replica on B and did a direct sync. Then I closed the share. Now, when I do an indirect sync from B=>A, the files are created on A in the appropriate dropbox and B's Exchange Log registers a new row with a status code of 1. This is definite progress!!!
From A=>B however, I get the same result: wingman.sgn appears briefly in the folder with the replica set and then disappears. A's Exchange Log soon thereafter shows a new row with a failed indirect sync.
Well, I noticed I had two copies of msrpfs35.dll on A (one in windows\system, the other in the c:\program files\common files\microsoft shared\replication manager 3.5 folder so I deleted it from the c:\windows\system32 folder.
But that didn't help matters. Maybe it will after I reboot.
At this point I have one question: Now that the files created by B are sitting in A's dropbox, what do I need to do in order to have the synchronizer on A take those files and process them, which will undoubtedly insert the new records in A's mdb file that were created in B's mdb file before the indirect sync was initiated. Yes, the synchronizer is running on A (it has to be or else the files created by B when the indirect synchronization was initiated wouldn't have found there way to the dropbox on A, right?).
Thanks
Still, obviously,
I Need Help
Tom Stoddard - 15 Jan 2006 17:55 GMT > Does TSISynch expose the replicaID of the managed replicas? The help > file appears to say that the replica set associated with managed > replicas only exposes the managed replica's name. You are correct about the replica items in the managedreplicas collection but you can get the replicaID from a replica object which is a member or the replicaset collection. For example:
dim mySync as Synchronizer dim rep as replica 'Tip: if you have JRO referenced in your application make sure to use an explicit reference for this variable. JRO has a replica object as well. I user "dim rep as synch40.replica" in my code. You would probably use "dim rep as synch35.replica". dim reps as replicaset
set mySync = new synchronizer mySync.DatabaseName = "C:\MyData.mdb" set reps = mySync.replicaset for each rep in reps debug.print rep.replicaID next
This code will give you replica id's for all replicas in the replica set of MyData.mdb. You can compare the replica name property of each replica to that of the replicas in the managed replica collection to see if the specific replica you are examining is managed.
> At this point I have one question: Now that the files created by B are > sitting in A's dropbox, what do I need to do in order to have the [quoted text clipped - 4 lines] > by B when the indirect synchronization was initiated wouldn't have > found there way to the dropbox on A, right?). That's not right. The files in A's dropbox were probably put there by the synchronizer on machine B. Thats why the dropboxes need to be shared. I just ran a quick test with my set up. I initiated an indirect sync from my A to B while the sychronizer on B was not running and 2 msg files were created in B's dropbox folder. The status of the exchange is 1 (in progress) and will remain as 1 until I start the synchronizer on B. The sychronizer on A has to keep running until this process is complete, however, or the sync will never get completed. Remember, both synchronizer have to be running simultaneously for an indirect synchronization to take place.
This is one of the tricky parts of trying to determine when it's safe to stop the synchronizer from running. If the synchronizer on the target machine is not running, then the synchronization status on the initiating machine will hang at 1 indefinately. You will need to have some code to let the process time out and stop the attempted synchronization if you intend to stop and start the synchronizer.
For now, you should probably try starting both synchronizers manually and just let them continue running. Once you've successfully synchronized then you can worry about starting and stopping the synchronizer. Like I said before, usually the synchronizer on the target machine is set up to run all the time.
> Thanks > > Still, obviously, > > I Need Help jacksonmacd - 15 Jan 2006 19:24 GMT >> At this point I have one question: Now that the files created by B are >> sitting in A's dropbox, what do I need to do in order to have the [quoted text clipped - 14 lines] >get completed. Remember, both synchronizer have to be running simultaneously >for an indirect synchronization to take place. PMFJI - I find this thread very interesting and informative.
I have always *assumed* that the two synchronizers worked, well, asynchronously during the indirect sync communications session. In other words, I thought that A created its message files in B's dropbox, and then temporarily dropped out of the equation. It is irrelevant whether or not B's synchronizer is running. A's synchronizer could be stopped after it creates the message files in B's dropbox.
When B's synchronizer is launched, it sees the message file in its dropbox, and proceeds to process it. At the end of its processing, B creates a message file in A's dropbox. Whether or not A is running is irrelevent to the success of creating the message file.
When A's synchronizer is launched again, it sees the message file in its dropbox. In this case, it happens to be the message required to finish the two-way sync that A happened to commence, but it could just as easily be a message file from any other synchronizer. It could even be a message file about a sync that was *initiated* from B.
If both synchronizers are running when all this takes place, then the elapsed time is minimized. However, either synchronizer can be off-line when the other synchronizer is creating the message file, and the indirect synch will still proceed as far as it can go. When the target synchronizer comes back online, then it proceeds with processing all message files in its dropbox. Each synchronizer has a agent that periodically polls its own dropbox to see if there are any incoming message files.
At least that's my picture of how it works. Correct me if I am wrong.
>This is one of the tricky parts of trying to determine when it's safe to >stop the synchronizer from running. If the synchronizer on the target >machine is not running, then the synchronization status on the initiating >machine will hang at 1 indefinately. You will need to have some code to let >the process time out and stop the attempted synchronization if you intend to >stop and start the synchronizer. I don't think that's correct, but I may be wrong. My experience is only with Jet 35 and Replication Manager. Other environments may be different.
********************** jackmacMACdonald@telusTELUS.net remove uppercase letters for true email http://www.geocities.com/jacksonmacd/ for info on MS Access security
Tom Stoddard - 15 Jan 2006 20:37 GMT >>> At this point I have one question: Now that the files created by B are >>> sitting in A's dropbox, what do I need to do in order to have the [quoted text clipped - 51 lines] > > At least that's my picture of how it works. Correct me if I am wrong. You are correct! I just tested it and it does work the way you explained. My test, however, was done without making any changes to records in either replica so it was the simplest scenario possible and it took an additional exchange to complete. I initiated the sync from A which put one file in B's dropbox. I then stopped A's synchronizer and started B's sychronizer. The msg file in B's dropbox disappeared and a new msg file appeared in A's dropbox. Then I stopped B's sychronizer and started A's again. The message in A's dropbox disappeared and another msg file was created in B's dropbox. I stopped A's synchronizer and started B's and this time the msg file disappeared from B's dropbox and no new files appeared in A's drop box.
If this was an active replica set and many users were making changes and synchronizing I imagine that there would be a need for several messages to be passed back and forth between synchronizers. That means that a sychronization could take a very long time to complete if both synchronizers were never running at the same time. In a scenario where a remote user only connects to the network and synchronizes ocassionally, this could cause replicas to be out of sync much of the time.
Thanks for correcting my explaination. This thread is helping me learn a lot more than I knew before.
>>This is one of the tricky parts of trying to determine when it's safe to >>stop the synchronizer from running. If the synchronizer on the target [quoted text clipped - 8 lines] > only with Jet 35 and Replication Manager. Other environments may be > different. I'm not sure what you mean. If you initiate an indirect sync in 3.5 and the other synchronizer is not running, what will happen? Won't the status recorded in MSysExchangeLog stay as "1"? From what I've seen, this is the only way to track the status of an indirect sync. The TSI object uses the historyitem and its status property seems to coincide with the status field of the MSysExchangeLog table. While it's true that you can let the synchronization happen asynchronously, that isn't acceptable in the application I'm working on. In my case, remote users are sales people in the field who connect through VPN's infrequently. I want them to wait for the synchronization to complete before they shut down there connection. The only way to do this is to track the status of the exchange. Right now, I allow 10 minutes for the synchronization to complete before I let the attempt time out and shut down the synchronizer. Hopefully, this will never happen.
Does this make sense?
> ********************** > jackmacMACdonald@telusTELUS.net > remove uppercase letters for true email > http://www.geocities.com/jacksonmacd/ for info on MS Access security jacksonmacd - 16 Jan 2006 01:32 GMT >>>This is one of the tricky parts of trying to determine when it's safe to >>>stop the synchronizer from running. If the synchronizer on the target [quoted text clipped - 22 lines] >minutes for the synchronization to complete before I let the attempt time >out and shut down the synchronizer. Hopefully, this will never happen. If you initiate the sync and the other synchronizer is not running, then it will create the message file as I explained. I was alluding to the fact that the thread has been about TSI Synchronizer and Jet 4.0. I dunno whether there are subtle differences compared to RM and Jet 4.0. I doubt that the behaviour is changed, but I don't know for certain.
I haven't looked into the status of the current sync's like you have done, so I can't offer any first-person experience about checking for whether the current sync is completed. My *guess* is that the status will stay as 1 until such time as the other synchronizer comes online and completes the second half of the sync. That can be any time in the future -- it's not required (from a technical sense) that the whole process be completed at one time. Your application may have different requirements.
>Does this make sense? >> >> ********************** >> jackmacMACdonald@telusTELUS.net >> remove uppercase letters for true email >> http://www.geocities.com/jacksonmacd/ for info on MS Access security ********************** jackmacMACdonald@telusTELUS.net remove uppercase letters for true email http://www.geocities.com/jacksonmacd/ for info on MS Access security
David W. Fenton - 16 Jan 2006 01:21 GMT >>> At this point I have one question: Now that the files created by >>> B are sitting in A's dropbox, what do I need to do in order to [quoted text clipped - 23 lines] > asynchronously during the indirect sync communications session. . > . I think this is a common misconception based on a lack of considering the architecture of an indirect synch.
Synchronizer A drops msg files in Synchronizer B's dropbox.
Synchronizer B puts files in Synchronizer A's dropbox.
Consider:
Assuming that synchronizer B is the remote synchronizer, in the case of a 2-way synch, how does it know to start putting the files in Synchronizer A's dropbox? Obviously, there has to be communication between the two synchronizers.
Furthermore, for a one-way synch, say A->B, Synchronizer B has to know to look in the dropbox. Perhaps whenever it's running it polls the dropbox. I don't know, but I strongly doubt that it does, because otherwise orphaned msg files would eventually get used, and they quite clearly do not (lmsg files left over from a filed synch are never processed). Given that it's pretty obvious Synchronizer B doesn't poll its local dropbox looking for msg files to process, it must of necessity be the case that there is communication between the synchronizers.
Consider also: have you ever noticed how there are groups of msg files and MDB files, and then those disappear and then more appear? This is because for referential integrity reasons, all changes cannot be sent in a single synch (in the simplest case, you can't delete a record, for instance, until it has been added first). Thus, even for a one-way synch, the remote synchronizer has to be told by the local "Hey! I'm finished now -- you can pick up those files and process them. When you're done, let me know, 'cause I've got more to send to you!"
So, I would say that your assumption is simply wrong.
I've never assumed any such thing myself, because my experience tells me that msg files left by an incomplete synch never get used at all.
And I know for a fact that they can be deleted without any impact on future synchronizations.
> . . . In > other words, I thought that A created its message files in B's [quoted text clipped - 7 lines] > B creates a message file in A's dropbox. Whether or not A is > running is irrelevent to the success of creating the message file. This is simply wrong, so far as I can tell.
> When A's synchronizer is launched again, it sees the message file > in its dropbox. In this case, it happens to be the message [quoted text clipped - 14 lines] > At least that's my picture of how it works. Correct me if I am > wrong. All my experience with indirect replication tells me that you are wrong.
>>This is one of the tricky parts of trying to determine when it's >>safe to stop the synchronizer from running. If the synchronizer on [quoted text clipped - 7 lines] > only with Jet 35 and Replication Manager. Other environments may > be different. I've been following your many posts in the forum lately, and you've provided a lot of very good information, but all of the above is completely at variance with my own replication experiences.
And almost all of my replication work, and *all* of the indirect replication, has been with Jet 3.5.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
Tom Stoddard - 16 Jan 2006 01:56 GMT .
>> I have always *assumed* that the two synchronizers worked, well, >> asynchronously during the indirect sync communications session. . [quoted text clipped - 13 lines] > Synchronizer A's dropbox? Obviously, there has to be communication > between the two synchronizers.
> Furthermore, for a one-way synch, say A->B, Synchronizer B has to > know to look in the dropbox. Perhaps whenever it's running it polls [quoted text clipped - 5 lines] > must of necessity be the case that there is communication between > the synchronizers. David, that didn't prove to be the case in my tests. I believe that the synchronizers do poll the dropbox locations. I remember reading an old post from Michka where he stated that the synchronizer polls much too frequently than he would prefer. I assume he meant that it polls for messages left by other synchronizers.
> Consider also: have you ever noticed how there are groups of msg > files and MDB files, and then those disappear and then more appear? [quoted text clipped - 5 lines] > process them. When you're done, let me know, 'cause I've got more to > send to you!" Actually, it appeared in my tests that the communication between synchronizers all took place through the messages left in the dropboxes. In your scenario above, the synchronizer doesn't need to yell "Hey!", it just sends the messages when it's ready and waits for the other synchronizer to find them. I imagine that the synchronizer can tell the other synchronizer it's finished by including that information in one of the message files.
The problem I have with using asynchronous sessions is that it would definately take too long to complete a synchronization because, in most cases, there needs to be several communications sent back and forth in order to complete the sync. This seems like a recipe for conflicts and out of sync replicas.
> So, I would say that your assumption is simply wrong. > [quoted text clipped - 59 lines] > And almost all of my replication work, and *all* of the indirect > replication, has been with Jet 3.5. jacksonmacd - 16 Jan 2006 04:39 GMT >>>> At this point I have one question: Now that the files created by >>>> B are sitting in A's dropbox, what do I need to do in order to [quoted text clipped - 30 lines] > >Synchronizer B puts files in Synchronizer A's dropbox. Yes, I understand that.
>Consider: > >Assuming that synchronizer B is the remote synchronizer, in the case >of a 2-way synch, how does it know to start putting the files in >Synchronizer A's dropbox? Obviously, there has to be communication >between the two synchronizers. I am not sure it is "obvious". What it *seems* to me is that Sync B finds a message file in its dropbox via polling, and processes the file. Contained in the message file is information that it originated from Sync A. Sync B *knows* that it did not initiate the session (one of the attributes exposed by the RM history is "initiated here"). Therefore, Sync B knows that it must communicate with Sync A to complete the session.
That behaviour can be explained easily without requiring communication between the two synchronizers.
>Furthermore, for a one-way synch, say A->B, Synchronizer B has to >know to look in the dropbox. Perhaps whenever it's running it polls >the dropbox. I don't know, but I strongly doubt that it does, I don't know for certain either, however, I think polling is a simpler explanation than synchronizer-to-synchronizer communication. Also, *how* would such communication take place -- via what IP Port? AFAIK, all that is required for successful indirect sync is clear access to the other guy's dropbox.
Should be fairly easy to test by attempting a synchronization from A to B when B is not running. Then shut down A, start up B, and see what it does. Then shutdown B, startup A, and observe. Of course, clear access to the dropboxes must be maintained at all times. I would test it now, but my home network doesn't have RM installed.
Another possible test: sync from A to B while B is offline. Preserve the message files elsewhere. Shutdown A and start B. Restore the message files into the dropbox. If they are processed, then polling is "certainly" (???) involved.
I've always assumed that polling was part of the robustness of indirect sync, and I think it's one of the reasons that the recommended location for the dropbox is *on* the synchronizer computer, but I stand to be corrected. Consider: if an initiating synchronizer is successful in creating a message file in another synchronizer's dropbox, then it has fulfilled all the "hazardous" portions of the synchronization. "All" that remains to fulfill the current part of the synchronzation is for the receiving synchronizer to open the message file on its local hard drive -- no WAN, LAN, or other flakey communication is required. A single-computer solution (ie, polling) is much more robust than a solution that requires computer-to-computer communication. To me, it just stands to reason that once the message file is created, you don't want any more cross-WAN communication.
>because otherwise orphaned msg files would eventually get used, and >they quite clearly do not (lmsg files left over from a filed synch Yes, I have seen that behaviour, although I cannot explain why they don't get processed.
>are never processed). Given that it's pretty obvious Synchronizer B >doesn't poll its local dropbox looking for msg files to process, it >must of necessity be the case that there is communication between >the synchronizers. I don't think that is necessarily correct -- I don't accept that it's "given" or "obvious" that polling doesn't occur. Absence of evidence is not evidence of absence.
>Consider also: have you ever noticed how there are groups of msg >files and MDB files, and then those disappear and then more appear? [quoted text clipped - 5 lines] >process them. When you're done, let me know, 'cause I've got more to >send to you!" Polling can explain that behaviour.
>So, I would say that your assumption is simply wrong. Could be... but then again, I don't think that your explanation is bullet-proof.
>I've never assumed any such thing myself, because my experience >tells me that msg files left by an incomplete synch never get used >at all. > >And I know for a fact that they can be deleted without any impact on >future synchronizations. As I stated in another message, I did not know that and I defer to your experience.
>> . . . In >> other words, I thought that A created its message files in B's [quoted text clipped - 9 lines] > >This is simply wrong, so far as I can tell. Should be fairly easy to test. You contend that both synchronizers must be running simultaneously in order for an indirect sync to occur. I contend that the sync can proceed, albeit more slowly, if either synchronizer is running, and that the sync will be completed successfully after both synchronizers have had their "kick at the can".
Consider this observed behaviour: Sync B is offline for whatever reason. Sync A initiates a session, placing message files in Sync B's dropbox. When Sync B comes online, it processes all the messages successfully. How does that jibe with your contention that both synchronizers must be running in order to complete the synchronization?
However, it's probably a moot point from an operational perspective. I think we would both agree that the best situation would be to have an always-running hub synchronizer with which the remotes would synchronize.
Here's a situation that I don't know how it would react: remote Sync A initiates a session with Sync B that happens to be off-line, but its dropbox is visible. It creates the message files in Dropbox B. Failing to hear back from B, Sync A goes offline (eg, remote user disconnects from VPN). Sometime later, Sync B goes online, sees the message file and processes it. It tries to communicate with Sync A, but the dropbox is not visible. Clearly that would result in a failed communication -- but what would Sync B do in the future? Would it continue to try to communicate with A, or would it give up? I don't know, but the answer is important to the OP's situation.
>> When A's synchronizer is launched again, it sees the message file >> in its dropbox. In this case, it happens to be the message [quoted text clipped - 33 lines] >provided a lot of very good information, but all of the above is >completely at variance with my own replication experiences. Is it at variance, or is it just a different interpretation of the same behaviour? I think the only place we disagree is whether synchronizer-to-synchronizer communication is required. And as I stated clearly, I stand to be corrected.
I read a very good book recently (title something like "design of everyday objects") that talked about the various mental pictures that people build for objects (eg, software). The mental picture held by the designer, programmer, and user may not always be the same. Neither of us had any input to the design of the replication, and we both have built a mental picture of how it works, based on our observations. Who's to say whether either mental picture is correct?
>And almost all of my replication work, and *all* of the indirect >replication, has been with Jet 3.5. Likewise. And I think that your experience is *way* more extensive than mine, but that doesn't necessarily mean that your mental picture is correct and that mine is incorrect. You haven't provided any compelling evidence that makes me change my mind.
********************** jackmacMACdonald@telusTELUS.net remove uppercase letters for true email http://www.geocities.com/jacksonmacd/ for info on MS Access security
Tom Stoddard - 16 Jan 2006 13:26 GMT > However, it's probably a moot point from an operational perspective. I > think we would both agree that the best situation would be to have an [quoted text clipped - 11 lines] > communicate with A, or would it give up? I don't know, but the answer > is important to the OP's situation. I think this is the critical issue in this conversation. The test I did worked because both machines remained online while I started and stopped the synchronizers. The simplest possible synchronization scenario took three steps. A sent messages to B, B sent a message back to A, and then A sent a message back to B again. I believe that in any one of those exchanges, if the machine attempting to send the message had not found the dropbox on the other machine, the exchange would have failed. I'll have to test this to know for sure and I'm not able to do that right now. If my guess is correct, then I need to amend my original assertion that it's important for both synchronizers to be running simultaniously to; a connection between the two machines must exist whenever either of the synchronizers are running and a synchronization attempt is in progress.
This has been a very interesting and informative discussion but I'm not sure if it has addressed the problem that "I need help" was having. "I need help" had been successful in getting one synchronizer to send a message to the other's dropbox but then nothing happened from there. Either the connection wasn't maintained, one of the synchronizers wasn't running, one of the replicas involved in the synchronization is not being managed by the correct synchronizer, or there is some sort of corruption in one or both of the replicas. By corruption, I mean that there is some information in a system table which is incorrect. It could have something to do with the way in which the replica set was created. We need to hear back from "I need help".
>>> When A's synchronizer is launched again, it sees the message file >>> in its dropbox. In this case, it happens to be the message [quoted text clipped - 59 lines] > remove uppercase letters for true email > http://www.geocities.com/jacksonmacd/ for info on MS Access security David W. Fenton - 16 Jan 2006 19:07 GMT >>>>> At this point I have one question: Now that the files created >>>>> by B are sitting in A's dropbox, what do I need to do in order [quoted text clipped - 50 lines] > That behaviour can be explained easily without requiring > communication between the two synchronizers. Yes. I rethought this whole thing overnight and realized I was being to categorical, and that message files and polling would be sufficient as a communications channel.
>>Furthermore, for a one-way synch, say A->B, Synchronizer B has to >>know to look in the dropbox. Perhaps whenever it's running it [quoted text clipped - 13 lines] > times. I would test it now, but my home network doesn't have RM > installed. Well, my experience with indirect replication always involved having both synchronizers running, and that was fragile enough. Introducing this concept of asynchronous replication seems to me to be asking for even more problems in what is already a very fragile operation.
> Another possible test: sync from A to B while B is offline. > Preserve the message files elsewhere. Shutdown A and start B. > Restore the message files into the dropbox. If they are processed, > then polling is "certainly" (???) involved. But that can't possibly work. If Synchronizer B is offline, Synchronizer B's dropbox won't be available, unless you're using the non-recommended architecture with all your dropboxes on a central server.
Given that Synchronizer A writes message files to Synchronizer B's dropbox, if Synchronizer B is offline, Synchronizer A has no access to drobox B, so it couldn't possibly work.
Thus, asynchronous syncs can only work when both sides of the synch are online, though, presumably, it doesn't require both synchrnoizers to be running.
> I've always assumed that polling was part of the robustness of > indirect sync, . . . "Robustness" is not a word that comes to my mind in connection with indirect synchronization!
> . . . and I think it's one of the reasons that the > recommended location for the dropbox is *on* the synchronizer [quoted text clipped - 9 lines] > it just stands to reason that once the message file is created, > you don't want any more cross-WAN communication. It also doesn't require any machine-to-machine protocol, such as RPC or the like, so I think you're right and I was completely wrong.
>>because otherwise orphaned msg files would eventually get used, >>and they quite clearly do not (lmsg files left over from a filed >>synch > > Yes, I have seen that behaviour, although I cannot explain why > they don't get processed. To me, that's evidence that indirect replication is already fragile enough that I"m not about to try to introduce more latency in the process by trying it when only one synchronizer is running.
[]
> Consider this observed behaviour: Sync B is offline for whatever > reason. Sync A initiates a session, placing message files in Sync > B's dropbox. When Sync B comes online, it processes all the > messages successfully. How does that jibe with your contention > that both synchronizers must be running in order to complete the > synchronization? This is the scenario you outlined above, and it seems to me it is fatally flawed, in that if Sync B is offline, its dropbox will be inaccessible, unless you've set up Sync B with a remote dropbox, which is not a recommended configuration.
> However, it's probably a moot point from an operational > perspective. I think we would both agree that the best situation > would be to have an always-running hub synchronizer with which the > remotes would synchronize. I can't see any advantage to doing it any other way.
> Here's a situation that I don't know how it would react: remote > Sync A initiates a session with Sync B that happens to be > off-line, but its dropbox is visible. . . . That is impossible, unless you're using the remote dropbox architecture, which has always been a non-recommended setup.
> . . . It creates the message files in Dropbox B. Failing > to hear back from B, Sync A goes offline (eg, remote user [quoted text clipped - 5 lines] > it give up? I don't know, but the answer is important to the OP's > situation. I don't know. I'd never consider setting things up in a manner that would make it possible for such a scenario to occur.
[]
>>I've been following your many posts in the forum lately, and >>you've provided a lot of very good information, but all of the [quoted text clipped - 5 lines] > synchronizer-to-synchronizer communication is required. And as I > stated clearly, I stand to be corrected. I suspect you are right that the communication is through message files in the dropboxes, which are polled.
> I read a very good book recently (title something like "design of > everyday objects") that talked about the various mental pictures [quoted text clipped - 4 lines] > works, based on our observations. Who's to say whether either > mental picture is correct? In this case, it's quite obvious that the people writing the documentation for replication have completely failed in their task. This kind of thing should have been explained in the basic replication documents. It's clearly not, since I've read all of them many times, and I know I wouldn't have missed an explanation of how replication works.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
jacksonmacd - 17 Jan 2006 03:26 GMT [ big snip]
>In this case, it's quite obvious that the people writing the >documentation for replication have completely failed in their task. >This kind of thing should have been explained in the basic >replication documents. It's clearly not, since I've read all of them >many times, and I know I wouldn't have missed an explanation of how >replication works. Sounds like we are basically in agreement.
One clarification about what is meant by offline: I was taking the stricter interpretation in that the dropbox was visible and accessible, but the synchronizer was not running. It sounds like you were interpretting it to mean that the dropbox did not exist either. In the latter sense, then I would agree that both synchronizers must be running for a successful sync. In the former case, either synchronizer can be stopped.
How could that happen besides by implementing the non-recommended method of locating the dropbox off-computer? Hung computer or failure to start the synchronizer after a reboot are two situations that come to mind.
********************** jackmacMACdonald@telusTELUS.net remove uppercase letters for true email http://www.geocities.com/jacksonmacd/ for info on MS Access security
David W. Fenton - 17 Jan 2006 13:56 GMT > [ big snip] > [quoted text clipped - 14 lines] > synchronizers must be running for a successful sync. In the former > case, either synchronizer can be stopped. I was reading "offline" as "not connected to the network," which seems to me to be the generally accepted definition of the term.
> How could that happen besides by implementing the non-recommended > method of locating the dropbox off-computer? Hung computer or > failure to start the synchronizer after a reboot are two > situations that come to mind. Eh? Just not connected to whatever network is the transport for the communication would put it offline.
Since my assumption is a hub/spoke architecture, with the spokes initiating the synch, this should never be an issue (on the hub, the synchronizer would always be running).
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
David W. Fenton - 15 Jan 2006 19:05 GMT > From A=>B however, I get the same result: wingman.sgn appears > briefly in the folder with the replica set and then disappears. > A's Exchange Log soon thereafter shows a new row with a failed > indirect sync. This doesn't sound right. The dropbox on the local machine should have wingman.sgn as soon as that machine's synchronizer is started up. Both dropboxes should have wingman.sgn created before you attempt to initiate a synch, since that's an indication that the synchronizer that manages those dropboxes is running. If it's not there on both of them, then that means your dropboxes are not properly configured.
[]
> At this point I have one question: Now that the files created by B > are sitting in A's dropbox, what do I need to do in order to have [quoted text clipped - 4 lines] > files created by B when the indirect synchronization was initiated > wouldn't have found there way to the dropbox on A, right?). Remember the way it works: Synchronizer A puts files in Synchronizer B's dropbox. If Synchronizer B is failing to complete the synch, then the files in its dropbox have not been processed, and can simply be deleted. Any new synchronization will check the generations in the actual files you're synching, rather than worrying about what's happened with the msg files in the dropboxes.
So, you can safely delete the files in any dropbox that result from a failed synch. Any information in them will be sent again in the next synch. That much I know for certain to be true, since I've done it a gazillion times.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
jacksonmacd - 16 Jan 2006 00:55 GMT >Remember the way it works: Synchronizer A puts files in Synchronizer >B's dropbox. If Synchronizer B is failing to complete the synch, [quoted text clipped - 7 lines] >next synch. That much I know for certain to be true, since I've done >it a gazillion times. Aha! There's been occasions on my system when something went awry, and one of the dropboxes accumulated tons of message files. I was never certain whether they could be deleted safely, and if subsequent sync's would repeat the information. Thanks for that confirmation.
********************** jackmacMACdonald@telusTELUS.net remove uppercase letters for true email http://www.geocities.com/jacksonmacd/ for info on MS Access security
David W. Fenton - 14 Jan 2006 00:32 GMT > I know your frustration. I think that the problems you are having > have nothing to do with the TSI Synchronizer. First of all, I > don't believe that an indirect synchronization will occur unless > the mdb files are located in non shared directories. It seems like > it should but I've read many times that it won't. My understanding is that only JRO allows you to control that.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
David W. Fenton - 14 Jan 2006 00:35 GMT > You need to make sure that both replicas are in unshared folders > and that they are both managed by their perspective jet [quoted text clipped - 3 lines] > replicas. But that was not until after I had indirect > synchronizations working correctly. One little hint for this:
Remember that every hard drive on NT-based versions of Windows has a hidden administrative share. Your C: drive has C$, your D: drive, D$, etc.
So, assuming you have administrative permissions, you could always use the administrative share for any direct synch, without needing to set one up.
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
David W. Fenton - 11 Oct 2006 00:16 GMT > I tried installing the service pack alone without having > Replicaton Manager installed and here's what happened: The TSI [quoted text clipped - 14 lines] > synchronizer file but that didn't work. When I install Replication > Manager it does exactly that and the TSI object begins to work. For what it's worth, I have gotten it working to do an indirect synch using only the TSI Synchronizer and no Jet 4 ReplMan installed on either end.
The key for getting the .Running property to work was in having the SynchronizerPath registry key.
The harder problem was getting the fact that the replicas were managed into the system tables of the replicas. I still haven't quite figured out how I made that happen yet, but I did.
So, I'm offering experience contrary to yours -- I've been able to get indirect replication working with only the TSI Synchronizer and no ReplMan at all (and no JRO).
 Signature David W. Fenton http://www.dfenton.com/ usenet at dfenton dot com http://www.dfenton.com/DFA/
|
|
|