Search Results

Search found 55552 results on 2223 pages for 'system variable'.

Page 281/2223 | < Previous Page | 277 278 279 280 281 282 283 284 285 286 287 288  | Next Page >

  • Intermittent asp.net mvc exception: “A public action method ABC could not be found on controller XYZ

    - by Chris Schoon
    Hi, I'm getting an intermittent exception saying that asp.net mvc can’t find the action method. Here’s the exception: A public action method 'Fill' could not be found on controller 'Schoon.Form.Web.Controllers.ChrisController'. I think I have the routing set up correctly because this application works most of the time. Here is the controller’s action method. [ActionName("Fill")] [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post), UserIdFilter, DTOFilter] public ActionResult Fill(int userId, int subscriberId, DisplayMode? mode) { //… } The route: routes.MapRoute( "SchoonForm", "Form/Fill/{subscriberId}", new { controller = "ChrisController", action = "Fill" }, new { subscriberId = @"\d+" } ); And here is the stack: System.Web.HttpException: A public action method 'Fill' could not be found on controller 'Schoon.Form.Web.Controllers.ChrisController'. at System.Web.Mvc.Controller.HandleUnknownAction(String actionName) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\Controller.cs:line 197 at System.Web.Mvc.Controller.ExecuteCore() in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\Controller.cs:line 164 at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\ControllerBase.cs:line 76 at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\ControllerBase.cs:line 87 at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs:line 80 at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs:line 68 at System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) in C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs:line 104 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) Here is an example of my filters they all work the same way: public class UserIdFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { const string Key = "userId"; if (filterContext.ActionParameters.ContainsKey(Key)) { filterContext.ActionParameters[Key] = // get the user id from session or cookie } base.OnActionExecuting(filterContext); } } Thanks, Chris

    Read the article

  • Flex fixed and variable height - can it be set in markup?

    - by Prutswonder
    I've got the following Flex application markup: <app:MyApplicationClass xmlns:app="*" width="100%" height="100%" layout="vertical" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:VBox id="idPageContainer" width="100%" height="100%" verticalGap="0" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:HBox id="idTopContainer" width="100%" height="28" horizontalGap="2"> (top menu stuff goes here) </mx:HBox> <mx:HBox id="idBottomContainer" width="100%" height="100%" verticalScrollPolicy="off" clipContent="false"> (page stuff goes here) </mx:HBox> </mx:VBox> </app:MyApplicationClass> When I run it, it displays top panel with a fixed height, and a bottom panel with variable height. I expect the bottom panel's height to contain the remaining height, but it somehow overflows off-page. The only way I found to fix this height issue (so far) is to programmatically set the height to be fixed instead of variable: <mx:HBox id="idBottomContainer" width="100%" height="700" verticalScrollPolicy="off" clipContent="false"> (page stuff goes here) </mx:HBox> And code-behind: package { import mx.containers.HBox; import mx.core.Application; import mx.events.ResizeEvent; // (...) public class MyApplicationClass extends Application { public var idBottomContainer:HBox; // (...) private function ON_CreationComplete (event:FlexEvent) : void { // (...) addEventListener(ResizeEvent.RESIZE, ON_Resize); } private function ON_Resize (event:Event) : void { idBottomContainer.height = this.height - idTopContainer.height; } } } But this solution is too "dirty" and I'm looking for a more elegant way. Does anyone know an alternative?

    Read the article

  • PHP + MYSQLI: Variable parameter/result binding with prepared statements.

    - by Brian Warshaw
    In a project that I'm about to wrap up, I've written and implemented an object-relational mapping solution for PHP. Before the doubters and dreamers cry out "how on earth?", relax -- I haven't found a way to make late static binding work -- I'm just working around it in the best way that I possibly can. Anyway, I'm not currently using prepared statements for querying, because I couldn't come up with a way to pass a variable number of arguments to the bind_params() or bind_result() methods. Why do I need to support a variable number of arguments, you ask? Because the superclass of my models (think of my solution as a hacked-up PHP ActiveRecord wannabe) is where the querying is defined, and so the find() method, for example, doesn't know how many parameters it would need to bind. Now, I've already thought of building an argument list and passing a string to eval(), but I don't like that solution very much -- I'd rather just implement my own security checks and pass on statements. Does anyone have any suggestions (or success stories) about how to get this done? If you can help me solve this first problem, perhaps we can tackle binding the result set (something I suspect will be more difficult, or at least more resource-intensive if it involves an initial query to determine table structure).

    Read the article

  • How to get more detail from an exception?

    - by cusimar9
    I have a .NET 4.0 web application which implements an error handler within the Application_Error event of Global.asax. When an exception occurs this intercepts it and sends me an email including a variety of information like the logged in user, the page the error occurred on, the contents of the session etc. This is all great but there is some fundamental detail missing which I seem unable to locate. For instance, this is a subset of an error I would receive and the associated stack trace: Source: Telerik.Web.UI Message: Selection out of range Parameter name: value Stack trace: at Telerik.Web.UI.RadComboBox.PerformDataBinding(IEnumerable dataSource) at Telerik.Web.UI.RadComboBox.OnDataSourceViewSelectCallback(IEnumerable data) at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) at Telerik.Web.UI.RadComboBox.OnDataBinding(EventArgs e) at Telerik.Web.UI.RadComboBox.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at Telerik.Web.UI.RadComboBox.DataBind() at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() at Telerik.Web.UI.RadComboBox.OnPreRender(EventArgs e) at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Now as lovely as this is I could do with knowing a) the name of the control and b) the value which caused the control to be 'out of range'. Any suggestions about how I could get this sort of information? I've run this in debug mode and the objects passed to Global.asax don't seem to hold any more detail that I can see.

    Read the article

  • How to Make my application handle Errors for a few different scenarios?

    - by NightsEVil
    so i have this code to extract a program to the temp directory then run it, the problem is it doesn't work perfectly on every computer (for some reason it hits a error or exception sometimes) string tempFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), ""); System.Diagnostics.Process defrag1 = System.Diagnostics.Process.Start(@"Programs\Optimize\AusLogics_Defrag.exe", string.Format(" -o{0} -y", tempFolder)); defrag1.WaitForExit(); string executableDirectoryName = Path.GetDirectoryName(Application.ExecutablePath); System.Diagnostics.Process defrag2 = System.Diagnostics.Process.Start(tempFolder + "\\" + "AusLogics_Defrag" + "\\" + "DiskDefrag.exe", ""); defrag2.WaitForExit(); System.IO.Directory.Delete(tempFolder + "\\" + "AusLogics_Defrag", true); and what i wanna know is there a way that say if it starts to extract but hits a error (no matter what it is) it will automatically change and go to this code, but if it DOESN'T hit a error it continues as it was meant to? string tempFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); System.Diagnostics.Process defrag1 = System.Diagnostics.Process.Start(@"Programs\Optimize\AusLogics_Defrag.exe", string.Format(" -o{0} -y", tempFolder)); defrag1.WaitForExit(); string executableDirectoryName = Path.GetDirectoryName(Application.ExecutablePath); System.Diagnostics.Process defrag2 = System.Diagnostics.Process.Start(tempFolder + "\\" + "AusLogics_Defrag" + "\\" + "DiskDefrag.exe", ""); defrag2.WaitForExit(); System.IO.Directory.Delete(tempFolder + "\\" + "AusLogics_Defrag", true); with the path going to the application data folder? and if THAT hits a error it would change that path to this, but if it DOESN'T hit a error it continues as it was meant to? string tempFolder = System.Environment.GetEnvironmentVariable("HomeDrive");

    Read the article

  • Creating a global variable on the fly. [PHP ENCRYPTION]

    - by stormdrain
    Is there a way to dynamically create constant variables on the fly? The idea is that upon logging into the system, a user would be asked to upload a small text file that would be fread, and assigned to a var that would be accessible throughout the system. If this is possible, just to be clear, would this variable then only be accessible to that user and only while the session is alive? Security being the main concern here, would it be more practical to store the var in a session variable? The plan: Data in the db will be encrypted via mcrypt, and the key will be stored on USB thumbdrives. The user will insert the thumbdrive when going to access the system. Upon logging in, the app will prompt the user to upload the key. They will navigate to the thumbdrive and key. Via fopen and fread, the key will be assigned to a global var which will then allow access to encrypted data, and will be used to encrypt new info being entered to the db. When the user logs out, or session times out, the global var will become empty. Thanks!

    Read the article

  • How can I simply change a class variable from another class in ObjectiveC?

    - by Daniel
    I simply want to change a variable of an object from another class. I can compile without a problem, but my variable always is set to 'null'. I used the following code: Object.h: @interface Object : NSObject { //... NSString *color; //... } @property(nonatomic, retain) NSString* color; + (id)Object; - (void)setColor:(NSString*)col; - (NSString*)getColor; @end Object.m: +(id)Object{ return [[[Object alloc] init] autorelease]; } - (void)setColor:(NSString*)col { self.color = col; } - (NSString*)getColor { return self.color; } MyViewController.h #import "Object.h" @interface ClassesTestViewController : UIViewController { Object *myObject; UILabel *label1; } @property UILabel *label1; @property (assign) Object *myObject; @end MyViewController.m: #import "Object.h" @implementation MyViewController @synthesize myObject; - (void)viewDidLoad { [myObject setColor:@"red"]; NSLog(@"Color = %@", [myObject getColor]); [super viewDidLoad]; } The NSLog message is always Color = (null) I tried many different ways to solve this problem, but no success. Any help would be appreciated.

    Read the article

  • File not found - MOSS 2007

    - by isimple
    i received the following error on some Sharepoint Pages File Not Found. at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.Load(String assemblyString) at System.Web.Configuration.CompilationSection.LoadAssembly(String assemblyName, Boolean throwOnFail) at System.Web.UI.TemplateParser.LoadAssembly(String assemblyName, Boolean throwOnFail) at System.Web.UI.MainTagNameToTypeMapper.ProcessTagNamespaceRegistrationCore(TagNamespaceRegisterEntry nsRegisterEntry) at System.Web.UI.MainTagNameToTypeMapper.ProcessTagNamespaceRegistration(TagNamespaceRegisterEntry nsRegisterEntry) at System.Web.UI.BaseTemplateParser.ProcessDirective(String directiveName, IDictionary directive) at System.Web.UI.TemplateControlParser.ProcessDirective(String directiveName, IDictionary directive) at System.Web.UI.PageParser.ProcessDirective(String directiveName, IDictionary directive) at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) I used Assembly Binding Log Viewer Tool (fuslogvw.exe) to locate the assembly which is not bound and the assembly seems to be Microsoft.Sharepoint.Intl.Resources.dll. This assemlby is not being located by the application resulting in 'File not Found' error. Can anyone guide me how to solve this?

    Read the article

  • How can I pipe two Perl CORE::system commands in a cross-platform way?

    - by Pedro Silva
    I'm writing a System::Wrapper module to abstract away from CORE::system and the qx operator. I have a serial method that attempts to connect command1's output to command2's input. I've made some progress using named pipes, but POSIX::mkfifo is not cross-platform. Here's part of what I have so far (the run method at the bottom basically calls system): package main; my $obj1 = System::Wrapper->new( interpreter => 'perl', arguments => [-pe => q{''}], input => ['input.txt'], description => 'Concatenate input.txt to STDOUT', ); my $obj2 = System::Wrapper->new( interpreter => 'perl', arguments => [-pe => q{'$_ = reverse $_}'}], description => 'Reverse lines of input input', output => { '>' => 'output' }, ); $obj1->serial( $obj2 ); package System::Wrapper; #... sub serial { my ($self, @commands) = @_; eval { require POSIX; POSIX->import(); require threads; }; my $tmp_dir = File::Spec->tmpdir(); my $last = $self; my @threads; push @commands, $self; for my $command (@commands) { croak sprintf "%s::serial: type of args to serial must be '%s', not '%s'", ref $self, ref $self, ref $command || $command unless ref $command eq ref $self; my $named_pipe = File::Spec->catfile( $tmp_dir, int \$command ); POSIX::mkfifo( $named_pipe, 0777 ) or croak sprintf "%s::serial: couldn't create named pipe %s: %s", ref $self, $named_pipe, $!; $last->output( { '>' => $named_pipe } ); $command->input( $named_pipe ); push @threads, threads->new( sub{ $last->run } ); $last = $command; } $_->join for @threads; } #... My specific questions: Is there an alternative to POSIX::mkfifo that is cross-platform? Win32 named pipes don't work, as you can't open those as regular files, neither do sockets, for the same reasons. 2. The above doesn't quite work; the two threads get spawned correctly, but nothing flows across the pipe. I suppose that might have something to do with pipe deadlocking or output buffering. What throws me off is that when I run those two commands in the actual shell, everything works as expected. Point 2 is solved; a -p fifo file test was not testing the correct file.

    Read the article

  • Why doesn't my UIViewController class keep track of an NSArray instance variable.

    - by TaoStoner
    Hey, I am new to Objective-C 2.0 and Xcode, so forgive me if I am missing something elementary here. Anyways, I am trying to make my own UIViewController class called GameView to display a new view. To work the game I need to keep track of an NSArray that I want to load from a plist file. I have made a method 'loadGame' which I want to load the correct NSArray into an instance variable. However it appears that after the method executes the instance variable loses track of the array. Its easier if I just show you the code.... @interface GameView : UIViewController { IBOutlet UIView *view IBOutlet UILabel *label; NSArray *currentGame; } -(IBOutlet)next; -(void)loadDefault; ... @implementation GameView - (IBOutlet)next{ int numElements = [currentGame count]; int r = rand() % numElements; NSString *myString = [currentGame objectAtIndex:(NSUInteger)r]; [label setText: myString]; } - (void)loadDefault { NSDictionary *games; NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *finalPath = [path stringByAppendingPathComponent:@"Games.plist"]; games = [NSDictionary dictionaryWithContentsOfFile:finalPath]; currentGame = [games objectForKey:@"Default"]; } when loadDefault gets called, everything runs perfectly, but when I try to use the currentGame NSArray later in the method call to next, currentGame appears to be nil. I am also aware of the memory management issues with this code. Any help would be appreciated with this problem.

    Read the article

  • Using a variable in a mysql query, in a C++ MFC program.

    - by D.Gaughan
    Hi, after extensive trawling of the internet I still havent found any solution for this problem. I`m writing a small C++ app that connects to an online database and outputs the data in a listbox. I need to enable a search function using an edit box, but I cant get the query to work while using a variable. My code is: res = mysql_perform_query (conn, "select distinct artist from Artists"); //res = mysql_perform_query (conn, "select album from Artists where artist = ' ' "); while((row = mysql_fetch_row(res)) != NULL){ CString str; UpdateData(); str = ("%s\n", row[0]); UpdateData(FALSE); m_list_control.AddString(str); } the first "res = " line is working fine, but I need the second one to work. I have a member variable m_search_edit set up for the edit box, but any way I try to include it in the sql statement causes errors. eg. res = mysql_perform_query (conn, "select album from Artists where artist = '"+m_search_edit+" ' "); causes this error: error C2664: 'mysql_perform_query' : cannot convert parameter 2 from 'class CString' to 'char *' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called" And when I convert m_search_edit to a char* it gives me a " Cannot add 2 pointers" error. Any way around this???

    Read the article

  • C#: at design time, how can I reliably determine the type of a variable that is declared using var?

    - by Cheeso
    I'm working on a completion (intellisense) facility for C# in emacs. The idea is, if a user types a fragment, then asks for completion via a particular keystroke combination, the completion facility will use .NET reflection to determine the possible completions. Doing this requires that the type of the thing being completed, be known. If it's a string, it has a set of known methods; if it's an Int32, it has a separate set of methods, and so on. Using semantic, a code lexer/parser package available in emacs, I can locate the variable declarations, and their types. Given that, it's straightforward to use reflection to get the methods and properties on the type, and then present the list of options to the user. The problem arrives when the code uses var in the declaration. How can I reliably determine the actual type used, when the variable is declared with the var keyword? Just to be clear, I don't need to determine it at runtime. I want to determine it at "Design time". So far the best idea I have is: extract the declaration statement, eg var foo = "a string value"; concatenate a statement foo.GetType(); dynamically compile the resulting C# fragment it into a new assembly load the assembly into a new AppDomain, run the framgment and get the return type. unload and discard the assembly This sounds awfully heavyweight, for each completion request in the editor. Any better ideas out there?

    Read the article

  • Is there anything inherently wrong with long variable/method names in Java?

    - by Doug Smith
    I know this is probably is a question of personal opinion, but I want to know what's standard practice and what would be frowned upon. One of my profs in university always seems to make his variable and method names as short as possible (getAmt() instead of getAmount) for instance. I have no objection to this, but personally, I prefer to have mine a little longer if it adds descriptiveness so the person reading it won't have to check or refer to documentation. For instance, we made a method that given a list of players, returns the player who scored the most goals. I made the method getPlayerWithMostGoals(), is this wrong? I toiled over choosing a way to make it shorter for awhile, but then I thought "why?". It gets the point across clearly and Eclipse makes it easy to autocomplete it when I type. I'm just wondering if the short variable names are a piece of the past due to needing everything to be as small as possible to be efficient. Is this still a requirement?

    Read the article

  • Undefined Variable? But I defined it...

    - by Rob
    Well before anyone claims that theres a duplicate question... (I've noticed that people who can't answer the question tend to run and look for a duplicate, and then report it.) Here is the duplicate you are looking for: http://stackoverflow.com/questions/2481382/php-claims-my-defined-variable-is-undefined However, this isn't quite a duplicate. It gives me a solution, but I'm not really looking for this particular solution. Here is my problem: Notice: Undefined variable: custom Now here is my code: $headers = apache_request_headers(); // Request the visitor's headers. $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; //This is what the header should be. foreach ($headers as $header => $value) { $custom .= "$header: $value"; } Clearly, $custom is defined. According to the other question, it's a global and should be marked as one. But how is it a global? And how can I make it a (non-global)? The script works fine, it still displays what its supposed to and acts correctly, but when I turn on error messages, it simply outputs that notice as well. I suppose its not currently necessary to fix it, but I'd like to anyway, as well as know why its doing this.

    Read the article

  • VB.NET CInt(Long) behaving differently in 32- and 64-bit environments

    - by LocoDelAssembly
    Hello everybody, this is my first message here. Today I had a problem converting a Long (Int64) to an Integer (Int32). The problem is that my code was always working in 32-bit environments, but when I try THE SAME executable in a 64-bit computer it crashes with a System.OverflowException exception. I've prepared this test code in VS2008 in a new project with default settings: Module Module1 Sub Main() Dim alpha As Long = -1 Dim delta As Integer Try delta = CInt(alpha And UInteger.MaxValue) Console.WriteLine("CINT OK") delta = Convert.ToInt32(alpha And UInteger.MaxValue) Console.WriteLine("Convert.ToInt32 OK") Catch ex As Exception Console.WriteLine(ex.GetType().ToString()) Finally Console.ReadLine() End Try End Sub End Module On my 32-bit setups (Windows XP SP3 32-bit and Windows 7 32-bit) it prints "CINT OK", but in the 64-bit computer (Windows 7 64-bit) that I've tested THE SAME executable it prints the exception name only. Is this behavior documented? I tried to find a reference but failed miserably. For reference I leave the MSIL code too: .method public static void Main() cil managed { .entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 88 (0x58) .maxstack 2 .locals init ([0] int64 alpha, [1] int32 delta, [2] class [mscorlib]System.Exception ex) IL_0000: nop IL_0001: ldc.i4.m1 IL_0002: conv.i8 IL_0003: stloc.0 IL_0004: nop .try { .try { IL_0005: ldloc.0 IL_0006: ldc.i4.m1 IL_0007: conv.u8 IL_0008: and IL_0009: conv.ovf.i4 IL_000a: stloc.1 IL_000b: ldstr "CINT OK" IL_0010: call void [mscorlib]System.Console::WriteLine(string) IL_0015: nop IL_0016: ldloc.0 IL_0017: ldc.i4.m1 IL_0018: conv.u8 IL_0019: and IL_001a: call int32 [mscorlib]System.Convert::ToInt32(int64) IL_001f: stloc.1 IL_0020: ldstr "Convert.ToInt32 OK" IL_0025: call void [mscorlib]System.Console::WriteLine(string) IL_002a: nop IL_002b: leave.s IL_0055 } // end .try catch [mscorlib]System.Exception { IL_002d: dup IL_002e: call void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.ProjectData::SetProjectError(class [mscorlib]System.Exception) IL_0033: stloc.2 IL_0034: nop IL_0035: ldloc.2 IL_0036: callvirt instance class [mscorlib]System.Type [mscorlib]System.Exception::GetType() IL_003b: callvirt instance string [mscorlib]System.Type::ToString() IL_0040: call void [mscorlib]System.Console::WriteLine(string) IL_0045: nop IL_0046: call void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.ProjectData::ClearProjectError() IL_004b: leave.s IL_0055 } // end handler } // end .try finally { IL_004d: nop IL_004e: call string [mscorlib]System.Console::ReadLine() IL_0053: pop IL_0054: endfinally } // end handler IL_0055: nop IL_0056: nop IL_0057: ret } // end of method Module1::Main I suspect that the instruction that is behaving differently is either conv.ovf.i4 or the ldc.i4.m1/conv.u8 pair. If you know what is going on here please let me know Thanks

    Read the article

  • Can a conforming C# compiler optimize away a local (but unused) variable if it is the only strong re

    - by stakx
    The title says it all, but let me explain: void Case_1() { var weakRef = new WeakReference(new object()); GC.Collect(); // <-- doesn't have to be an explicit call; just assume that // garbage collection would occur at this point. if (weakRef.IsAlive) ... } In this code example, I obviously have to plan for the possibility that the new'ed object is reclaimed by the garbage collector; therefore the if statement. (Note that I'm using weakRef for the sole purpose of checking if the new'ed object is still around.) void Case_2() { var unusedLocalVar = new object(); var weakRef = new WeakReference(unusedLocalVar); GC.Collect(); // <-- doesn't have to be an explicit call; just assume that // garbage collection would occur at this point. Debug.Assert(weakReferenceToUseless.IsAlive); } The main change in this code example from the previous one is that the new'ed object is strongly referenced by a local variable (unusedLocalVar). However, this variable is never used again after the weak reference (weakRef) has been created. Question: Is a conforming C# compiler allowed to optimize the first two lines of Case_2 into those of Case_1 if it sees that unusedLocalVar is only used in one place, namely as an argument to the WeakReference constructor? i.e. is there any possibility that the assertion in Case_2 could ever fail?

    Read the article

  • Why does local variable names take precedence over function names in JavaScripts?

    - by fredrik
    In JavaScript you can define function in a bunch of different ways: function BatmanController () { } var BatmanController = function () { } // If you want to be EVIL eval("function BatmanController () {}"); // If you are fancy (function () { function BatmanController () { } }()); By accident I ran across a unexpected behaviour today. When declaring a local variable (in the fancy way) with the same name as function the local variable takes presence inside the local scope. For example: (function () { "use strict"; function BatmanController () { } console.log(typeof BatmanController); // outputs "function" var RobinController = function () { } console.log(typeof RobinController); // outputs "function" var JokerController = 1; function JokerController () { } console.log(typeof JokerController); // outputs "number", Ehm what? }()); Anyone know why var JokerController isn't overwritten by function JokerController? I tested this in Chrome, Safari, Canary, Firefox. I would guess it's due to some "look ahead" JavaScript optimizing done in the V8 and JägerMonkey engines. But is there any technical explanation to explain this behaviour?

    Read the article

  • Casting/dereferencing member variable pointer from void*, is this safe?

    - by Damien
    Hi all, I had a problem while hacking a bigger project so I made a simpel test case. If I'm not omitting something, my test code works fine, but maybe it works accidentally so I wanted to show it to you and ask if there are any pitfalls in this approach. I have an OutObj which has a member variable (pointer) InObj. InObj has a member function. I send the address of this member variable object (InObj) to a callback function as void*. The type of this object never changes so inside the callback I recast to its original type and call the aFunc member function in it. In this exampel it works as expected, but in the project I'm working on it doesn't. So I might be omitting something or maybe there is a pitfall here and this works accidentally. Any comments? Thanks a lot in advance. (The problem I have in my original code is that InObj.data is garbage). #include <stdio.h> class InObj { public: int data; InObj(int argData); void aFunc() { printf("Inside aFunc! data is: %d\n", data); }; }; InObj::InObj(int argData) { data = argData; } class OutObj { public: InObj* objPtr; OutObj(int data); ~OutObj(); }; OutObj::OutObj(int data) { objPtr = new InObj(data); } OutObj::~OutObj() { delete objPtr; } void callback(void* context) { ((InObj*)context)->aFunc(); } int main () { OutObj a(42); callback((void*)a.objPtr); }

    Read the article

  • jQuery: Is it possible to assign a DOM element to a variable for later use?

    - by Braxo
    I'm working on a project that is using jQuery, which I'm much more familiar with Mootools. I'll start with my code first. var customNamespace = { status: 'closed', popup: $('#popup'), showPopup: function() { // ... } } $(document).ready(function(){ console.log($('#popup')); console.log(customNamespace.popup); console.log($(customNamespace.popup)); $('#popup').fadeIn('slow'); (customNamespace.popup).fadeIn('slow'); $(customNamespace.popup).fadeIn('slow'); }); My goal is to not have jQuery traverse the DOM everytime I want to do something with the #popup div, so I wanted to save it to a variable to use it throughout my script. When the page loads, the console prints out the object 3 times as I would expect, so I assumed that for each method, the fadeIn would just work. But it doesn't, only $('#popup').fadeIn('slow'); Actually fades in the div. Even if I remove my namespace hash, and just save the object to a global variable, and do a var globalVariable = $('#popup'); . . . globalVariable.fadeIn('slow'); Also does not work as I thought it would. Can jQuery do what I am trying to do?

    Read the article

  • how to pass instance variables between handlers (routes) in sinatra (without flash, sessions, class variable or db)?

    - by jj_
    Say you have: get '/' do haml :index end get '/form' do haml :form end post '/form' do @message = params[:message] redirect to ('/') --- how to pass @message here? end I'd like the @message instance variable to be available (passed to) in "/" action as well, so I can show it in haml view. How can I do that without using session, flash, a @@class_variable, or db persistence ? I'd simply like to pass values as if I was working with passing values between methods. I don't want to use session cookies because user could have them turned off, I don't like it being a class variable which is exposed to all code, and I don't need to overhead of a db. Thanks edit: This is another question explaining a very easy way to deal with this in rails Passing parameters in rails redirect_to This is some more info i gathered around from forums. The following works for rails, i've tried it in Sinatra but no luck, but please try it, maybe I did something wrong, I don't know, and if this code help someone come up with a new idea, please share it If you are redirecting to action2 at the end of action1, just append the value to the end of the redirect: my_var = <some logic> redirect_to :action => 'action2', :my_var => my_var on the same thread another user proposes the folowing: def action1 redirect_to :action => 'action2', :value => params[:current_varaible] end def action2 puts params[:value].inspect end source: http://www.ruby-forum.com/topic/134953 Can something like this work in Sinatra? Thanks

    Read the article

  • Cannot determine why pointer variable will not address elements in a string in this program?

    - by Smith Will Suffice
    I am attempting to utilize a pointer variable to access elements of a string and there are issues with my code generating a compilation error: #include <stdio.h> #define MAX 29 char arrayI[250]; char *ptr; int main(void) { ptr = arrayI; puts("Enter string to arrayI: up to 29 chars:\n"); fgets(arrayI, MAX, stdin); printf("\n Now printing array by pointer:\n"); printf("%s", *ptr); ptr = arrayI[1]; //(I set the pointer to the second array char element) printf("%c", *ptr); //Here is where I was wanting to use my pointer to //point to individual array elements. return 0; } My compiler crieth: [Warning] assignment makes pointer from integer without a cast [enabled by default] I do not see where my pointer was ever assigned to the integer data type? Could someone please explain why my attempt to implement a pointer variable is failing? Thanks all!

    Read the article

  • iTunes 9.0.2 hangs on launch on Mac OS X 10.6.2

    - by dlamblin
    My iTunes 9.0.2 hangs on launch in OS X 10.6.2. This doesn't happen all the time, only if I've been running for a while. Then it will recur until I restart. Similarly Safari 4.0.4 will hang in the flash player plugin when about to play a video. If I restart both these problems go away until later. Based on this crash dump I am suspecting Audio Hijack Pro. I will try to install a newer version of the driver involved, but so far I haven't had much luck. I have uninstalled the Flash Plugin (10.0.r42 and r32) but clearly I want it in the long run. This is iTunes' crash report. Date/Time: 2009-12-14 19:56:02 -0500 OS Version: 10.6.2 (Build 10C540) Architecture: x86_64 Report Version: 6 Command: iTunes Path: /Applications/iTunes.app/Contents/MacOS/iTunes Version: 9.0.2 (9.0.2) Build Version: 2 Project Name: iTunes Source Version: 9022501 Parent: launchd [120] PID: 16878 Event: hang Duration: 3.55s (sampling started after 2 seconds) Steps: 16 (100ms sampling interval) Pageins: 5 Pageouts: 0 Process: iTunes [16878] Path: /Applications/iTunes.app/Contents/MacOS/iTunes UID: 501 Thread 8f96000 User stack: 16 ??? (in iTunes + 6633) [0x29e9] 16 ??? (in iTunes + 6843) [0x2abb] 16 ??? (in iTunes + 11734) [0x3dd6] 16 ??? (in iTunes + 44960) [0xbfa0] 16 ??? (in iTunes + 45327) [0xc10f] 16 ??? (in iTunes + 2295196) [0x23159c] 16 ??? (in iTunes + 103620) [0x1a4c4] 16 ??? (in iTunes + 105607) [0x1ac87] 16 ??? (in iTunes + 106442) [0x1afca] 16 OpenAComponent + 433 (in CarbonCore) [0x972e9dd0] 16 CallComponentOpen + 43 (in CarbonCore) [0x972ebae7] 16 CallComponentDispatch + 29 (in CarbonCore) [0x972ebb06] 16 DefaultOutputAUEntry + 319 (in CoreAudio) [0x70031117] 16 AUGenericOutputEntry + 15273 (in CoreAudio) [0x7000e960] 16 AUGenericOutputEntry + 13096 (in CoreAudio) [0x7000e0df] 16 AUGenericOutputEntry + 9628 (in CoreAudio) [0x7000d353] 16 ??? [0xe0c16d] 16 ??? [0xe0fdf8] 16 ??? [0xe0e1e7] 16 ahs_hermes_CoreAudio_init + 32 (in Instant Hijack Server) [0x13fc7e9] 16 semaphore_wait_signal_trap + 10 (in libSystem.B.dylib) [0x9798e922] Kernel stack: 16 semaphore_wait_continue + 0 [0x22a0a5] Thread 9b9eb7c User stack: 16 thread_start + 34 (in libSystem.B.dylib) [0x979bbe42] 16 _pthread_start + 345 (in libSystem.B.dylib) [0x979bbfbd] 16 ??? (in iTunes + 4011870) [0x3d475e] 16 CFRunLoopRun + 84 (in CoreFoundation) [0x993497a4] 16 CFRunLoopRunSpecific + 452 (in CoreFoundation) [0x99343864] 16 __CFRunLoopRun + 2079 (in CoreFoundation) [0x9934477f] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x9798e8da] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 9bc8b7c User stack: 16 start_wqthread + 30 (in libSystem.B.dylib) [0x979b4336] 16 _pthread_wqthread + 390 (in libSystem.B.dylib) [0x979b44f1] 16 _dispatch_worker_thread2 + 234 (in libSystem.B.dylib) [0x979b4a68] 16 _dispatch_queue_invoke + 163 (in libSystem.B.dylib) [0x979b4cc3] 16 kevent + 10 (in libSystem.B.dylib) [0x979b50ea] Kernel stack: 16 kevent + 97 [0x471745] Binary Images: 0x1000 - 0xbecfea com.apple.iTunes 9.0.2 (9.0.2) <1F665956-0131-39AF-F334-E29E510D42DA> /Applications/iTunes.app/Contents/MacOS/iTunes 0x13f6000 - 0x1402ff7 com.rogueamoeba.audio_hijack_server.hermes 2.2.2 (2.2.2) <9B29AE7F-6951-E63F-616A-482B62179A5C> /usr/local/hermes/modules/Instant Hijack Server.hermesmodule/Contents/MacOS/Instant Hijack Server 0x70000000 - 0x700cbffb com.apple.audio.units.Components 1.6.1 (1.6.1) <600769A2-479A-CA6E-A214-C8766F7CBD0F> /System/Library/Components/CoreAudio.component/Contents/MacOS/CoreAudio 0x97284000 - 0x975a3fe7 com.apple.CoreServices.CarbonCore 861.2 (861.2) <A9077470-3786-09F2-E0C7-F082B7F97838> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore 0x9798e000 - 0x97b32feb libSystem.B.dylib ??? (???) <D45B91B2-2B4C-AAC0-8096-1FC48B7E9672> /usr/lib/libSystem.B.dylib 0x99308000 - 0x9947ffef com.apple.CoreFoundation 6.6.1 (550.13) <AE9FC6F7-F0B2-DE58-759E-7DB89C021A46> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation Process: AirPort Base Station Agent [142] Path: /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent UID: 501 Thread 8b1d3d4 DispatchQueue 1 User stack: 16 ??? (in AirPort Base Station Agent + 5344) [0x1000014e0] 16 ??? (in AirPort Base Station Agent + 70666) [0x10001140a] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 8b80000 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 6e3c7a8 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 __workq_kernreturn + 10 (in libSystem.B.dylib) [0x7fff878869da] Kernel stack: 16 workqueue_thread_yielded + 562 [0x4cb6ae] Thread 8b0f3d4 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 select$DARWIN_EXTSN + 10 (in libSystem.B.dylib) [0x7fff878b09e2] Kernel stack: 16 sleep + 52 [0x487f93] Thread 8bcb000 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 ??? (in AirPort Base Station Agent + 71314) [0x100011692] 16 ??? (in AirPort Base Station Agent + 13712) [0x100003590] 16 ??? (in AirPort Base Station Agent + 71484) [0x10001173c] 16 __semwait_signal + 10 (in libSystem.B.dylib) [0x7fff878a79ee] Kernel stack: 16 semaphore_wait_continue + 0 [0x22a0a5] Binary Images: 0x100000000 - 0x100016fff com.apple.AirPortBaseStationAgent 1.5.4 (154.2) <73DF13C1-AF86-EC2C-9056-8D1946E607CF> /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: AppleSpell [3041] Path: /System/Library/Services/AppleSpell.service/Contents/MacOS/AppleSpell UID: 501 Thread 999a000 DispatchQueue 1 User stack: 16 ??? (in AppleSpell + 5852) [0x1000016dc] 16 ??? (in AppleSpell + 6508) [0x10000196c] 16 -[NSSpellServer run] + 72 (in Foundation) [0x7fff81d3b796] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 8a9e7a8 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Binary Images: 0x100000000 - 0x1000a9fef com.apple.AppleSpell 1.6.1 (61.1) <6DE57CC1-77A0-BC06-45E7-E1EACEBE1A88> /System/Library/Services/AppleSpell.service/Contents/MacOS/AppleSpell 0x7fff81cbc000 - 0x7fff81f3dfe7 com.apple.Foundation 6.6.1 (751.14) <767349DB-C486-70E8-7970-F13DB4CDAF37> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: autofsd [52] Path: /usr/libexec/autofsd UID: 0 Thread 79933d4 DispatchQueue 1 User stack: 16 ??? (in autofsd + 5340) [0x1000014dc] 16 ??? (in autofsd + 6461) [0x10000193d] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 75997a8 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Binary Images: 0x100000000 - 0x100001ff7 autofsd ??? (???) <29276FAC-AEA8-1520-5329-C75F9D453D6C> /usr/libexec/autofsd 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: blued [51] Path: /usr/sbin/blued UID: 0 Thread 7993000 DispatchQueue 1 User stack: 16 ??? (in blued + 5016) [0x100001398] 16 ??? (in blued + 152265) [0x1000252c9] 16 -[NSRunLoop(NSRunLoop) run] + 77 (in Foundation) [0x7fff81d07903] 16 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270 (in Foundation) [0x7fff81d07a24] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 70db000 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 84d2000 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 select$DARWIN_EXTSN + 10 (in libSystem.B.dylib) [0x7fff878b09e2] Kernel stack: 16 sleep + 52 [0x487f93] Binary Images: 0x100000000 - 0x100044fff blued ??? (???) <ECD752C9-F98E-3052-26BF-DC748281C992> /usr/sbin/blued 0x7fff81cbc000 - 0x7fff81f3dfe7 com.apple.Foundation 6.6.1 (751.14) <767349DB-C486-70E8-7970-F13DB4CDAF37> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: check_afp [84504] Path: /System/Library/Filesystems/AppleShare/check_afp.app/Contents/MacOS/check_afp UID: 0 Thread 1140f000 DispatchQueue 1 User stack: 16 ??? (in check_afp + 5596) [0x1000015dc] 16 ??? (in check_afp + 12976) [0x1000032b0] 16 ??? (in check_afp + 6664) [0x100001a08] 16 ??? (in check_afp + 6520) [0x100001978] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 13ad8b7c DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 13ad6b7c User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 ??? (in check_afp + 13071) [0x10000330f] 16 mach_msg_server_once + 285 (in libSystem.B.dylib) [0x7fff878b2417] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 13ad87a8 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 select$DARWIN_EXTSN + 10 (in libSystem.B.dylib) [0x7fff878b09e2] Kernel stack: 16 sleep + 52 [0x487f93] Binary Images: 0x100000000 - 0x100004ff7 com.apple.check_afp 2.0 (2.0) <EE865A7B-8CDC-7649-58E1-6FE2B43F7A73> /System/Library/Filesystems/AppleShare/check_afp.app/Contents/MacOS/check_afp 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: configd [14] Path: /usr/libexec/configd UID: 0 Thread 704a3d4 DispatchQueue 1 User stack: 16 start + 52 (in configd) [0x100001488] 16 main + 2051 (in configd) [0x100001c9e] 16 server_loop + 72 (in configd) [0x1000024f4] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 6e70000 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 74a7b7c User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 plugin_exec + 1440 (in configd) [0x100003c5b] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 7560000 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 _io_pm_force_active_settings + 2266 (in PowerManagement) [0x10050f968] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 75817a8 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 select$DARWIN_EXTSN + 10 (in libSystem.B.dylib) [0x7fff878b09e2] Kernel stack: 16 sleep + 52 [0x487f93] Thread 8b1db7c User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 __workq_kernreturn + 10 (in libSystem.B.dylib) [0x7fff878869da] Kernel stack: 16 workqueue_thread_yielded + 562 [0x4cb6ae] Binary Images: 0x100000000 - 0x100026ff7 configd ??? (???) <58C02CBA-5556-4CDC-2763-814C4C7175DE> /usr/libexec/configd 0x10050c000 - 0x10051dfff com.apple.SystemConfiguration.PowerManagement 160.0.0 (160.0.0) <0AC3D2ED-919E-29C7-9EEF-629FBDDA6159> /System/Library/SystemConfiguration/PowerManagement.bundle/Contents/MacOS/PowerManagement 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: coreaudiod [114] Path: /usr/sbin/coreaudiod UID: 202 Thread 83b93d4 DispatchQueue 1 User stack: 16 ??? (in coreaudiod + 3252) [0x100000cb4] 16 ??? (in coreaudiod + 26505) [0x100006789] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 847e3d4 DispatchQueue 2 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 854c000 User stack: 3 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 3 __workq_kernreturn + 10 (in libSystem.B.dylib) [0x7fff878869da] Kernel stack: 3 workqueue_thread_yielded + 562 [0x4cb6ae] Binary Images: 0x100000000 - 0x10001ffef coreaudiod ??? (???) <A060D20F-A6A7-A3AE-84EC-11D7D7DDEBC6> /usr/sbin/coreaudiod 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: coreservicesd [66] Path: /System/Library/CoreServices/coreservicesd UID: 0 Thread 7994000 DispatchQueue 1 User stack: 16 ??? (in coreservicesd + 3756) [0x100000eac] 16 _CoreServicesServerMain + 522 (in CarbonCore) [0x7fff8327a972] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread 76227a8 User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 read + 10 (in libSystem.B.dylib) [0x7fff87877426] Kernel stack: 16 lo64_unix_scall + 77 [0x29e3fd] 16 unix_syscall64 + 617 [0x4ee947] 16 read_nocancel + 158 [0x496add] 16 write + 312 [0x49634d] 16 get_pathbuff + 3054 [0x3023db] 16 tsleep + 105 [0x4881ce] 16 wakeup + 786 [0x487da7] 16 thread_block + 33 [0x226fb5] 16 thread_block_reason + 331 [0x226f27] 16 thread_dispatch + 1950 [0x226c88] 16 machine_switch_context + 753 [0x2a5a37] Thread 7622b7c User stack: 16 thread_start + 13 (in libSystem.B.dylib) [0x7fff878a5e41] 16 _pthread_start + 331 (in libSystem.B.dylib) [0x7fff878a5f8e] 16 fmodWatchConsumer + 347 (in CarbonCore) [0x7fff8322f23f] 16 __semwait_signal + 10 (in libSystem.B.dylib) [0x7fff878a79ee] Kernel stack: 16 semaphore_wait_continue + 0 [0x22a0a5] Thread 79913d4 User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 244 (in libSystem.B.dylib) [0x7fff87887286] 16 _dispatch_queue_invoke + 185 (in libSystem.B.dylib) [0x7fff8788775c] 16 kevent + 10 (in libSystem.B.dylib) [0x7fff87885bba] Kernel stack: 16 kevent + 97 [0x471745] Thread 84d2b7c User stack: 16 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 16 __workq_kernreturn + 10 (in libSystem.B.dylib) [0x7fff878869da] Kernel stack: 16 workqueue_thread_yielded + 562 [0x4cb6ae] Thread 9b643d4 User stack: 15 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 15 __workq_kernreturn + 10 (in libSystem.B.dylib) [0x7fff878869da] Kernel stack: 16 workqueue_thread_yielded + 562 [0x4cb6ae] Binary Images: 0x100000000 - 0x100000fff coreservicesd ??? (???) <D804E55B-4376-998C-AA25-2ADBFDD24414> /System/Library/CoreServices/coreservicesd 0x7fff831cb000 - 0x7fff834fdfef com.apple.CoreServices.CarbonCore 861.2 (861.2) <39F3B259-AC2A-792B-ECFE-4F3E72F2D1A5> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore 0x7fff86e3b000 - 0x7fff86faeff7 com.apple.CoreFoundation 6.6.1 (550.13) <1E952BD9-37C6-16BE-B2F0-CD92A6283D37> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: cron [31] Path: /usr/sbin/cron UID: 0 Thread 75acb7c DispatchQueue 1 User stack: 16 ??? (in cron + 2872) [0x100000b38] 16 ??? (in cron + 3991) [0x100000f97] 16 sleep + 61 (in libSystem.B.dylib) [0x7fff878f5090] 16 __semwait_signal + 10 (in libSystem.B.dylib) [0x7fff878a79ee] Kernel stack: 16 semaphore_wait_continue + 0 [0x22a0a5] Binary Images: 0x100000000 - 0x100006fff cron ??? (???) <3C5DCC7E-B6E8-1318-8E00-AB721270BFD4> /usr/sbin/cron 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: cvmsServ [104] Path: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/cvmsServ UID: 0 Thread 761f3d4 DispatchQueue 1 User stack: 16 ??? (in cvmsServ + 4100) [0x100001004] 16 ??? (in cvmsServ + 23081) [0x100005a29] 16 mach_msg_server + 597 (in libSystem.B.dylib) [0x7fff878ea1c8] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Binary Images: 0x100000000 - 0x100008fff cvmsServ ??? (???) <6200AD80-4159-5656-8736-B72B7388C461> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/cvmsServ 0x7fff8786c000 - 0x7fff87a2aff7 libSystem.B.dylib ??? (???) <526DD3E5-2A8B-4512-ED97-01B832369959> /usr/lib/libSystem.B.dylib Process: DirectoryService [11] Path: /usr/sbin/DirectoryService UID: 0 Thread 70db7a8 DispatchQueue 1 User stack: 16 start + 52 (in DirectoryService) [0x10000da74] 16 main + 3086 (in DirectoryService) [0x10000e68a] 16 CFRunLoopRun + 70 (in CoreFoundation) [0x7fff86e859b6] 16 CFRunLoopRunSpecific + 575 (in CoreFoundation) [0x7fff86e85c2f] 16 __CFRunLoopRun + 1698 (in CoreFoundation) [0x7fff86e867a2] 16 mach_msg_trap + 10 (in libSystem.B.dylib) [0x7fff8786ce3a] Kernel stack: 16 ipc_mqueue_receive_continue + 0 [0x210aa3] Thread <multiple> DispatchQueue 6 User stack: 17 start_wqthread + 13 (in libSystem.B.dylib) [0x7fff87886a55] 17 _pthread_wqthread + 353 (in libSystem.B.dylib) [0x7fff87886bb8] 16 _dispatch_worker_thread2 + 231 (in libSystem.B.dylib) [0x7fff87887279] 16 _dispatch_call_block_and_release + 15 (in libSystem.B.dylib) [0x7fff878a8ce8] 16 syscall + 10 (in libSystem.B.dylib) [0x7fff878a92da] 1 _disp

    Read the article

  • MySQL Syslog Audit Plugin

    - by jonathonc
    This post shows the construction process of the Syslog Audit plugin that was presented at MySQL Connect 2012. It is based on an environment that has the appropriate development tools enabled including gcc,g++ and cmake. It also assumes you have downloaded the MySQL source code (5.5.16 or higher) and have compiled and installed the system into the /usr/local/mysql directory ready for use.  The information provided below is designed to show the different components that make up a plugin, and specifically an audit type plugin, and how it comes together to be used within the MySQL service. The MySQL Reference Manual contains information regarding the plugin API and how it can be used, so please refer there for more detailed information. The code in this post is designed to give the simplest information necessary, so handling every return code, managing race conditions etc is not part of this example code. Let's start by looking at the most basic implementation of our plugin code as seen below: /*    Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.    Author:  Jonathon Coombes    Licence: GPL    Description: An auditing plugin that logs to syslog and                 can adjust the loglevel via the system variables. */ #include <stdio.h> #include <string.h> #include <mysql/plugin_audit.h> #include <syslog.h> There is a commented header detailing copyright/licencing and meta-data information and then the include headers. The two important include statements for our plugin are the syslog.h plugin, which gives us the structures for syslog, and the plugin_audit.h include which has details regarding the audit specific plugin api. Note that we do not need to include the general plugin header plugin.h, as this is done within the plugin_audit.h file already. To implement our plugin within the current implementation we need to add it into our source code and compile. > cd /usr/local/src/mysql-5.5.28/plugin > mkdir audit_syslog > cd audit_syslog A simple CMakeLists.txt file is created to manage the plugin compilation: MYSQL_ADD_PLUGIN(audit_syslog audit_syslog.cc MODULE_ONLY) Run the cmake  command at the top level of the source and then you can compile the plugin using the 'make' command. This results in a compiled audit_syslog.so library, but currently it is not much use to MySQL as there is no level of api defined to communicate with the MySQL service. Now we need to define the general plugin structure that enables MySQL to recognise the library as a plugin and be able to install/uninstall it and have it show up in the system. The structure is defined in the plugin.h file in the MySQL source code.  /*   Plugin library descriptor */ mysql_declare_plugin(audit_syslog) {   MYSQL_AUDIT_PLUGIN,           /* plugin type                    */   &audit_syslog_descriptor,     /* descriptor handle               */   "audit_syslog",               /* plugin name                     */   "Author Name",                /* author                          */   "Simple Syslog Audit",        /* description                     */   PLUGIN_LICENSE_GPL,           /* licence                         */   audit_syslog_init,            /* init function     */   audit_syslog_deinit,          /* deinit function */   0x0001,                       /* plugin version                  */   NULL,                         /* status variables        */   NULL,                         /* system variables                */   NULL,                         /* no reserves                     */   0,                            /* no flags                        */ } mysql_declare_plugin_end; The general plugin descriptor above is standard for all plugin types in MySQL. The plugin type is defined along with the init/deinit functions and interface methods into the system for sharing information, and various other metadata information. The descriptors have an internally recognised version number so that plugins can be matched against the api on the running server. The other details are usually related to the type-specific methods and structures to implement the plugin. Each plugin has a type-specific descriptor as well which details how the plugin is implemented for the specific purpose of that plugin type. /*   Plugin type-specific descriptor */ static struct st_mysql_audit audit_syslog_descriptor= {   MYSQL_AUDIT_INTERFACE_VERSION,                        /* interface version    */   NULL,                                                 /* release_thd function */   audit_syslog_notify,                                  /* notify function      */   { (unsigned long) MYSQL_AUDIT_GENERAL_CLASSMASK |                     MYSQL_AUDIT_CONNECTION_CLASSMASK }  /* class mask           */ }; In this particular case, the release_thd function has not been defined as it is not required. The important method for auditing is the notify function which is activated when an event occurs on the system. The notify function is designed to activate on an event and the implementation will determine how it is handled. For the audit_syslog plugin, the use of the syslog feature sends all events to the syslog for recording. The class mask allows us to determine what type of events are being seen by the notify function. There are currently two major types of event: 1. General Events: This includes general logging, errors, status and result type events. This is the main one for tracking the queries and operations on the database. 2. Connection Events: This group is based around user logins. It monitors connections and disconnections, but also if somebody changes user while connected. With most audit plugins, the principle behind the plugin is to track changes to the system over time and counters can be an important part of this process. The next step is to define and initialise the counters that are used to track the events in the service. There are 3 counters defined in total for our plugin - the # of general events, the # of connection events and the total number of events.  static volatile int total_number_of_calls; /* Count MYSQL_AUDIT_GENERAL_CLASS event instances */ static volatile int number_of_calls_general; /* Count MYSQL_AUDIT_CONNECTION_CLASS event instances */ static volatile int number_of_calls_connection; The init and deinit functions for the plugin are there to be called when the plugin is activated and when it is terminated. These offer the best option to initialise the counters for our plugin: /*  Initialize the plugin at server start or plugin installation. */ static int audit_syslog_init(void *arg __attribute__((unused))) {     openlog("mysql_audit:",LOG_PID|LOG_PERROR|LOG_CONS,LOG_USER);     total_number_of_calls= 0;     number_of_calls_general= 0;     number_of_calls_connection= 0;     return(0); } The init function does a call to openlog to initialise the syslog functionality. The parameters are the service to log under ("mysql_audit" in this case), the syslog flags and the facility for the logging. Then each of the counters are initialised to zero and a success is returned. If the init function is not defined, it will return success by default. /*  Terminate the plugin at server shutdown or plugin deinstallation. */ static int audit_syslog_deinit(void *arg __attribute__((unused))) {     closelog();     return(0); } The deinit function will simply close our syslog connection and return success. Note that the syslog functionality is part of the glibc libraries and does not require any external factors.  The function names are what we define in the general plugin structure, so these have to match otherwise there will be errors. The next step is to implement the event notifier function that was defined in the type specific descriptor (audit_syslog_descriptor) which is audit_syslog_notify. /* Event notifier function */ static void audit_syslog_notify(MYSQL_THD thd __attribute__((unused)), unsigned int event_class, const void *event) { total_number_of_calls++; if (event_class == MYSQL_AUDIT_GENERAL_CLASS) { const struct mysql_event_general *event_general= (const struct mysql_event_general *) event; number_of_calls_general++; syslog(audit_loglevel,"%lu: User: %s Command: %s Query: %s\n", event_general->general_thread_id, event_general->general_user, event_general->general_command, event_general->general_query ); } else if (event_class == MYSQL_AUDIT_CONNECTION_CLASS) { const struct mysql_event_connection *event_connection= (const struct mysql_event_connection *) event; number_of_calls_connection++; syslog(audit_loglevel,"%lu: User: %s@%s[%s] Event: %d Status: %d\n", event_connection->thread_id, event_connection->user, event_connection->host, event_connection->ip, event_connection->event_subclass, event_connection->status ); } }   In the case of an event, the notifier function is called. The first step is to increment the total number of events that have occurred in our database.The event argument is then cast into the appropriate event structure depending on the class type, of general event or connection event. The event type counters are incremented and details are sent via the syslog() function out to the system log. There are going to be different line formats and information returned since the general events have different data compared to the connection events, even though some of the details overlap, for example, user, thread id, host etc. On compiling the code now, there should be no errors and the resulting audit_syslog.so can be loaded into the server and ready to use. Log into the server and type: mysql> INSTALL PLUGIN audit_syslog SONAME 'audit_syslog.so'; This will install the plugin and will start updating the syslog immediately. Note that the audit plugin attaches to the immediate thread and cannot be uninstalled while that thread is active. This means that you cannot run the UNISTALL command until you log into a different connection (thread) on the server. Once the plugin is loaded, the system log will show output such as the following: Oct  8 15:33:21 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: (null)  Query: INSTALL PLUGIN audit_syslog SONAME 'audit_syslog.so' Oct  8 15:33:21 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: Query  Query: INSTALL PLUGIN audit_syslog SONAME 'audit_syslog.so' Oct  8 15:33:40 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: (null)  Query: show tables Oct  8 15:33:40 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: Query  Query: show tables Oct  8 15:33:43 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: (null)  Query: select * from t1 Oct  8 15:33:43 machine mysql_audit:[8337]: 87: User: root[root] @ localhost []  Command: Query  Query: select * from t1 It appears that two of each event is being shown, but in actuality, these are two separate event types - the result event and the status event. This could be refined further by changing the audit_syslog_notify function to handle the different event sub-types in a different manner.  So far, it seems that the logging is working with events showing up in the syslog output. The issue now is that the counters created earlier to track the number of events by type are not accessible when the plugin is being run. Instead there needs to be a way to expose the plugin specific information to the service and vice versa. This could be done via the information_schema plugin api, but for something as simple as counters, the obvious choice is the system status variables. This is done using the standard structure and the declaration: /*  Plugin status variables for SHOW STATUS */ static struct st_mysql_show_var audit_syslog_status[]= {   { "Audit_syslog_total_calls",     (char *) &total_number_of_calls,     SHOW_INT },   { "Audit_syslog_general_events",     (char *) &number_of_calls_general,     SHOW_INT },   { "Audit_syslog_connection_events",     (char *) &number_of_calls_connection,     SHOW_INT },   { 0, 0, SHOW_INT } };   The structure is simply the name that will be displaying in the mysql service, the address of the associated variables, and the data type being used for the counter. It is finished with a blank structure to show that there are no more variables. Remember that status variables may have the same name for variables from other plugin, so it is considered appropriate to add the plugin name at the start of the status variable name to avoid confusion. Looking at the status variables in the mysql client shows something like the following: mysql> show global status like "audit%"; +--------------------------------+-------+ | Variable_name                  | Value | +--------------------------------+-------+ | Audit_syslog_connection_events | 1     | | Audit_syslog_general_events    | 2     | | Audit_syslog_total_calls       | 3     | +--------------------------------+-------+ 3 rows in set (0.00 sec) The final connectivity piece for the plugin is to allow the interactive change of the logging level between the plugin and the system. This requires the ability to send changes via the mysql service through to the plugin. This is done using the system variables interface and defining a single variable to keep track of the active logging level for the facility. /* Plugin system variables for SHOW VARIABLES */ static MYSQL_SYSVAR_STR(loglevel, audit_loglevel,                         PLUGIN_VAR_RQCMDARG,                         "User can specify the log level for auditing",                         audit_loglevel_check, audit_loglevel_update, "LOG_NOTICE"); static struct st_mysql_sys_var* audit_syslog_sysvars[] = {     MYSQL_SYSVAR(loglevel),     NULL }; So now the system variable 'loglevel' is defined for the plugin and associated to the global variable 'audit_loglevel'. The check or validation function is defined to make sure that no garbage values are attempted in the update of the variable. The update function is used to save the new value to the variable. Note that the audit_syslog_sysvars structure is defined in the general plugin descriptor to associate the link between the plugin and the system and how much they interact. Next comes the implementation of the validation function and the update function for the system variable. It is worth noting that if you have a simple numeric such as integers for the variable types, the validate function is often not required as MySQL will handle the automatic check and validation of simple types. /* longest valid value */ #define MAX_LOGLEVEL_SIZE 100 /* hold the valid values */ static const char *possible_modes[]= { "LOG_ERROR", "LOG_WARNING", "LOG_NOTICE", NULL };  static int audit_loglevel_check(     THD*                        thd,    /*!< in: thread handle */     struct st_mysql_sys_var*    var,    /*!< in: pointer to system                                         variable */     void*                       save,   /*!< out: immediate result                                         for update function */     struct st_mysql_value*      value)  /*!< in: incoming string */ {     char buff[MAX_LOGLEVEL_SIZE];     const char *str;     const char **found;     int length;     length= sizeof(buff);     if (!(str= value->val_str(value, buff, &length)))         return 1;     /*         We need to return a pointer to a locally allocated value in "save".         Here we pick to search for the supplied value in an global array of         constant strings and return a pointer to one of them.         The other possiblity is to use the thd_alloc() function to allocate         a thread local buffer instead of the global constants.     */     for (found= possible_modes; *found; found++)     {         if (!strcmp(*found, str))         {             *(const char**)save= *found;             return 0;         }     }     return 1; } The validation function is simply to take the value being passed in via the SET GLOBAL VARIABLE command and check if it is one of the pre-defined values allowed  in our possible_values array. If it is found to be valid, then the value is assigned to the save variable ready for passing through to the update function. static void audit_loglevel_update(     THD*                        thd,        /*!< in: thread handle */     struct st_mysql_sys_var*    var,        /*!< in: system variable                                             being altered */     void*                       var_ptr,    /*!< out: pointer to                                             dynamic variable */     const void*                 save)       /*!< in: pointer to                                             temporary storage */ {     /* assign the new value so that the server can read it */     *(char **) var_ptr= *(char **) save;     /* assign the new value to the internal variable */     audit_loglevel= *(char **) save; } Since all the validation has been done already, the update function is quite simple for this plugin. The first part is to update the system variable pointer so that the server can read the value. The second part is to update our own global plugin variable for tracking the value. Notice that the save variable is passed in as a void type to allow handling of various data types, so it must be cast to the appropriate data type when assigning it to the variables. Looking at how the latest changes affect the usage of the plugin and the interaction within the server shows: mysql> show global variables like "audit%"; +-----------------------+------------+ | Variable_name         | Value      | +-----------------------+------------+ | audit_syslog_loglevel | LOG_NOTICE | +-----------------------+------------+ 1 row in set (0.00 sec) mysql> set global audit_syslog_loglevel="LOG_ERROR"; Query OK, 0 rows affected (0.00 sec) mysql> show global status like "audit%"; +--------------------------------+-------+ | Variable_name                  | Value | +--------------------------------+-------+ | Audit_syslog_connection_events | 1     | | Audit_syslog_general_events    | 11    | | Audit_syslog_total_calls       | 12    | +--------------------------------+-------+ 3 rows in set (0.00 sec) mysql> show global variables like "audit%"; +-----------------------+-----------+ | Variable_name         | Value     | +-----------------------+-----------+ | audit_syslog_loglevel | LOG_ERROR | +-----------------------+-----------+ 1 row in set (0.00 sec)   So now we have a plugin that will audit the events on the system and log the details to the system log. It allows for interaction to see the number of different events within the server details and provides a mechanism to change the logging level interactively via the standard system methods of the SET command. A more complex auditing plugin may have more detailed code, but each of the above areas is what will be involved and simply expanded on to add more functionality. With the above skeleton code, it is now possible to create your own audit plugins to implement your own auditing requirements. If, however, you are not of the coding persuasion, then you could always consider the option of the MySQL Enterprise Audit plugin that is available to purchase.

    Read the article

  • Loosely coupled .NET Cache Provider using Dependency Injection

    - by Rhames
    I have recently been reading the excellent book “Dependency Injection in .NET”, written by Mark Seemann. I do not generally buy software development related books, as I never seem to have the time to read them, but I have found the time to read Mark’s book, and it was time well spent I think. Reading the ideas around Dependency Injection made me realise that the Cache Provider code I wrote about earlier (see http://geekswithblogs.net/Rhames/archive/2011/01/10/using-the-asp.net-cache-to-cache-data-in-a-model.aspx) could be refactored to use Dependency Injection, which should produce cleaner code. The goals are to: Separate the cache provider implementation (using the ASP.NET data cache) from the consumers (loose coupling). This will also mean that the dependency on System.Web for the cache provider does not ripple down into the layers where it is being consumed (such as the domain layer). Provide a decorator pattern to allow a consumer of the cache provider to be implemented separately from the base consumer (i.e. if we have a base repository, we can decorate this with a caching version). Although I used the term repository, in reality the cache consumer could be just about anything. Use constructor injection to provide the Dependency Injection, with a suitable DI container (I use Castle Windsor). The sample code for this post is available on github, https://github.com/RobinHames/CacheProvider.git ICacheProvider In the sample code, the key interface is ICacheProvider, which is in the domain layer. 1: using System; 2: using System.Collections.Generic; 3:   4: namespace CacheDiSample.Domain 5: { 6: public interface ICacheProvider<T> 7: { 8: T Fetch(string key, Func<T> retrieveData, DateTime? absoluteExpiry, TimeSpan? relativeExpiry); 9: IEnumerable<T> Fetch(string key, Func<IEnumerable<T>> retrieveData, DateTime? absoluteExpiry, TimeSpan? relativeExpiry); 10: } 11: }   This interface contains two methods to retrieve data from the cache, either as a single instance or as an IEnumerable. the second paramerter is of type Func<T>. This is the method used to retrieve data if nothing is found in the cache. The ASP.NET implementation of the ICacheProvider interface needs to live in a project that has a reference to system.web, typically this will be the root UI project, or it could be a separate project. The key thing is that the domain or data access layers do not need system.web references adding to them. In my sample MVC application, the CacheProvider is implemented in the UI project, in a folder called “CacheProviders”: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: using System.Web.Caching; 6: using CacheDiSample.Domain; 7:   8: namespace CacheDiSample.CacheProvider 9: { 10: public class CacheProvider<T> : ICacheProvider<T> 11: { 12: public T Fetch(string key, Func<T> retrieveData, DateTime? absoluteExpiry, TimeSpan? relativeExpiry) 13: { 14: return FetchAndCache<T>(key, retrieveData, absoluteExpiry, relativeExpiry); 15: } 16:   17: public IEnumerable<T> Fetch(string key, Func<IEnumerable<T>> retrieveData, DateTime? absoluteExpiry, TimeSpan? relativeExpiry) 18: { 19: return FetchAndCache<IEnumerable<T>>(key, retrieveData, absoluteExpiry, relativeExpiry); 20: } 21:   22: #region Helper Methods 23:   24: private U FetchAndCache<U>(string key, Func<U> retrieveData, DateTime? absoluteExpiry, TimeSpan? relativeExpiry) 25: { 26: U value; 27: if (!TryGetValue<U>(key, out value)) 28: { 29: value = retrieveData(); 30: if (!absoluteExpiry.HasValue) 31: absoluteExpiry = Cache.NoAbsoluteExpiration; 32:   33: if (!relativeExpiry.HasValue) 34: relativeExpiry = Cache.NoSlidingExpiration; 35:   36: HttpContext.Current.Cache.Insert(key, value, null, absoluteExpiry.Value, relativeExpiry.Value); 37: } 38: return value; 39: } 40:   41: private bool TryGetValue<U>(string key, out U value) 42: { 43: object cachedValue = HttpContext.Current.Cache.Get(key); 44: if (cachedValue == null) 45: { 46: value = default(U); 47: return false; 48: } 49: else 50: { 51: try 52: { 53: value = (U)cachedValue; 54: return true; 55: } 56: catch 57: { 58: value = default(U); 59: return false; 60: } 61: } 62: } 63:   64: #endregion 65:   66: } 67: }   The FetchAndCache helper method checks if the specified cache key exists, if it does not, the Func<U> retrieveData method is called, and the results are added to the cache. Using Castle Windsor to register the cache provider In the MVC UI project (my application root), Castle Windsor is used to register the CacheProvider implementation, using a Windsor Installer: 1: using Castle.MicroKernel.Registration; 2: using Castle.MicroKernel.SubSystems.Configuration; 3: using Castle.Windsor; 4:   5: using CacheDiSample.Domain; 6: using CacheDiSample.CacheProvider; 7:   8: namespace CacheDiSample.WindsorInstallers 9: { 10: public class CacheInstaller : IWindsorInstaller 11: { 12: public void Install(IWindsorContainer container, IConfigurationStore store) 13: { 14: container.Register( 15: Component.For(typeof(ICacheProvider<>)) 16: .ImplementedBy(typeof(CacheProvider<>)) 17: .LifestyleTransient()); 18: } 19: } 20: }   Note that the cache provider is registered as a open generic type. Consuming a Repository I have an existing couple of repository interfaces defined in my domain layer: IRepository.cs 1: using System; 2: using System.Collections.Generic; 3:   4: using CacheDiSample.Domain.Model; 5:   6: namespace CacheDiSample.Domain.Repositories 7: { 8: public interface IRepository<T> 9: where T : EntityBase 10: { 11: T GetById(int id); 12: IList<T> GetAll(); 13: } 14: }   IBlogRepository.cs 1: using System; 2: using CacheDiSample.Domain.Model; 3:   4: namespace CacheDiSample.Domain.Repositories 5: { 6: public interface IBlogRepository : IRepository<Blog> 7: { 8: Blog GetByName(string name); 9: } 10: }   These two repositories are implemented in the DataAccess layer, using Entity Framework to retrieve data (this is not important though). One important point is that in the BaseRepository implementation of IRepository, the methods are virtual. This will allow the decorator to override them. The BlogRepository is registered in a RepositoriesInstaller, again in the MVC UI project. 1: using Castle.MicroKernel.Registration; 2: using Castle.MicroKernel.SubSystems.Configuration; 3: using Castle.Windsor; 4:   5: using CacheDiSample.Domain.CacheDecorators; 6: using CacheDiSample.Domain.Repositories; 7: using CacheDiSample.DataAccess; 8:   9: namespace CacheDiSample.WindsorInstallers 10: { 11: public class RepositoriesInstaller : IWindsorInstaller 12: { 13: public void Install(IWindsorContainer container, IConfigurationStore store) 14: { 15: container.Register(Component.For<IBlogRepository>() 16: .ImplementedBy<BlogRepository>() 17: .LifestyleTransient() 18: .DependsOn(new 19: { 20: nameOrConnectionString = "BloggingContext" 21: })); 22: } 23: } 24: }   Now I can inject a dependency on the IBlogRepository into a consumer, such as a controller in my sample code: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: using System.Web.Mvc; 6:   7: using CacheDiSample.Domain.Repositories; 8: using CacheDiSample.Domain.Model; 9:   10: namespace CacheDiSample.Controllers 11: { 12: public class HomeController : Controller 13: { 14: private readonly IBlogRepository blogRepository; 15:   16: public HomeController(IBlogRepository blogRepository) 17: { 18: if (blogRepository == null) 19: throw new ArgumentNullException("blogRepository"); 20:   21: this.blogRepository = blogRepository; 22: } 23:   24: public ActionResult Index() 25: { 26: ViewBag.Message = "Welcome to ASP.NET MVC!"; 27:   28: var blogs = blogRepository.GetAll(); 29:   30: return View(new Models.HomeModel { Blogs = blogs }); 31: } 32:   33: public ActionResult About() 34: { 35: return View(); 36: } 37: } 38: }   Consuming the Cache Provider via a Decorator I used a Decorator pattern to consume the cache provider, this means my repositories follow the open/closed principle, as they do not require any modifications to implement the caching. It also means that my controllers do not have any knowledge of the caching taking place, as the DI container will simply inject the decorator instead of the root implementation of the repository. The first step is to implement a BlogRepository decorator, with the caching logic in it. Note that this can reside in the domain layer, as it does not require any knowledge of the data access methods. BlogRepositoryWithCaching.cs 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5:   6: using CacheDiSample.Domain.Model; 7: using CacheDiSample.Domain; 8: using CacheDiSample.Domain.Repositories; 9:   10: namespace CacheDiSample.Domain.CacheDecorators 11: { 12: public class BlogRepositoryWithCaching : IBlogRepository 13: { 14: // The generic cache provider, injected by DI 15: private ICacheProvider<Blog> cacheProvider; 16: // The decorated blog repository, injected by DI 17: private IBlogRepository parentBlogRepository; 18:   19: public BlogRepositoryWithCaching(IBlogRepository parentBlogRepository, ICacheProvider<Blog> cacheProvider) 20: { 21: if (parentBlogRepository == null) 22: throw new ArgumentNullException("parentBlogRepository"); 23:   24: this.parentBlogRepository = parentBlogRepository; 25:   26: if (cacheProvider == null) 27: throw new ArgumentNullException("cacheProvider"); 28:   29: this.cacheProvider = cacheProvider; 30: } 31:   32: public Blog GetByName(string name) 33: { 34: string key = string.Format("CacheDiSample.DataAccess.GetByName.{0}", name); 35: // hard code 5 minute expiry! 36: TimeSpan relativeCacheExpiry = new TimeSpan(0, 5, 0); 37: return cacheProvider.Fetch(key, () => 38: { 39: return parentBlogRepository.GetByName(name); 40: }, 41: null, relativeCacheExpiry); 42: } 43:   44: public Blog GetById(int id) 45: { 46: string key = string.Format("CacheDiSample.DataAccess.GetById.{0}", id); 47:   48: // hard code 5 minute expiry! 49: TimeSpan relativeCacheExpiry = new TimeSpan(0, 5, 0); 50: return cacheProvider.Fetch(key, () => 51: { 52: return parentBlogRepository.GetById(id); 53: }, 54: null, relativeCacheExpiry); 55: } 56:   57: public IList<Blog> GetAll() 58: { 59: string key = string.Format("CacheDiSample.DataAccess.GetAll"); 60:   61: // hard code 5 minute expiry! 62: TimeSpan relativeCacheExpiry = new TimeSpan(0, 5, 0); 63: return cacheProvider.Fetch(key, () => 64: { 65: return parentBlogRepository.GetAll(); 66: }, 67: null, relativeCacheExpiry) 68: .ToList(); 69: } 70: } 71: }   The key things in this caching repository are: I inject into the repository the ICacheProvider<Blog> implementation, via the constructor. This will make the cache provider functionality available to the repository. I inject the parent IBlogRepository implementation (which has the actual data access code), via the constructor. This will allow the methods implemented in the parent to be called if nothing is found in the cache. I override each of the methods implemented in the repository, including those implemented in the generic BaseRepository. Each override of these methods follows the same pattern. It makes a call to the CacheProvider.Fetch method, and passes in the parentBlogRepository implementation of the method as the retrieval method, to be used if nothing is present in the cache. Configuring the Caching Repository in the DI Container The final piece of the jigsaw is to tell Castle Windsor to use the BlogRepositoryWithCaching implementation of IBlogRepository, but to inject the actual Data Access implementation into this decorator. This is easily achieved by modifying the RepositoriesInstaller to use Windsor’s implicit decorator wiring: 1: using Castle.MicroKernel.Registration; 2: using Castle.MicroKernel.SubSystems.Configuration; 3: using Castle.Windsor; 4:   5: using CacheDiSample.Domain.CacheDecorators; 6: using CacheDiSample.Domain.Repositories; 7: using CacheDiSample.DataAccess; 8:   9: namespace CacheDiSample.WindsorInstallers 10: { 11: public class RepositoriesInstaller : IWindsorInstaller 12: { 13: public void Install(IWindsorContainer container, IConfigurationStore store) 14: { 15:   16: // Use Castle Windsor implicit wiring for the block repository decorator 17: // Register the outermost decorator first 18: container.Register(Component.For<IBlogRepository>() 19: .ImplementedBy<BlogRepositoryWithCaching>() 20: .LifestyleTransient()); 21: // Next register the IBlogRepository inmplementation to inject into the outer decorator 22: container.Register(Component.For<IBlogRepository>() 23: .ImplementedBy<BlogRepository>() 24: .LifestyleTransient() 25: .DependsOn(new 26: { 27: nameOrConnectionString = "BloggingContext" 28: })); 29: } 30: } 31: }   This is all that is needed. Now if the consumer of the repository makes a call to the repositories method, it will be routed via the caching mechanism. You can test this by stepping through the code, and seeing that the DataAccess.BlogRepository code is only called if there is no data in the cache, or this has expired. The next step is to add the SQL Cache Dependency support into this pattern, this will be a future post.

    Read the article

  • Server Clustering (Django, Apache, Nginx, Postgres)

    - by system-matrix
    I have a project deployed with django, Apache, Nginx and Postgres. The project has requirement of live data viewable to customers. The projects main points are: 1. Devices in field send data to server(devices are also like website users) after login. 2. There is background import process which imports the uploaded data in postgres. 3. The webusers of the system use this data and can send commands to the devices, which devices read when they login. 4. There are also background analysis routines running on the data. All the above mentioned setup and system is deployed on one amazon EC2 cloud machine. The project currently supports over 600 devices and 400 users. But as the number of devices are increasing with time the performance of the server is going down. We want to extend this project so that it can support more and more devices. My initial thinking is, We will create one more server like current one and divide the devices amongst these to servers. But Again We need a central user and device managment point though django admin. Any Ideas? What are the best possible ways to create a scalable architecture? How can I create a Postgres Cluster and Use it with Django, if possible?

    Read the article

< Previous Page | 277 278 279 280 281 282 283 284 285 286 287 288  | Next Page >